前言

我记得我之前的博客是写过C#实例相关的文章,但是考虑到过于琐碎,我并没有那么多时间,所以指拿出来文件操作的部分来记录,因为对于程序来说,输入和输出的使用频率和重要性会更高一些。

本篇内容参考自 互联网,哔哩哔哩相关视频,《C#开发实例》以及本人经验

获取文件基本信息

获取文件的大小

方法说明

获取文件大小,需要使用File类的Open方法开打开指定的文件,然后使用FileStream类的Length属性获取文件的长度。

  1. File类的Open方法

    File类的Open根据传入的文件路径,获取其FileStream并返回,函数签名如下:

    1
    2
    3
    public static FileStream Open(string path, FileMode mode, FileAccess access, FileShare share);
    public static FileStream Open(string path, FileMode mode, FileAccess access);
    public static FileStream Open(string path, FileMode mode);
    • path:文件路径

    • modeFileMode枚举值之一,用于指定在文件不存在时或者其他情况的相关操作。

      枚举值 说明
      CreateNew = 1 指定操作系统创建一个新的文件
      Create = 2 同上,如果文件已经存在,则将其覆盖
      Open = 3 指定操作系统打开现有文件
      OpenOrCreate = 4 指定操作系统打开文件(如果文件存在),否则,创建新文件
      Truncate = 5 指定操作系统应打开现有文件。 当打开文件时,被截断其大小为零字节。
      Append = 6 打开现有文件并查找到文件尾,或者创建新文件并打开。
    • 返回值:返回指定路径文件的FileStream,具有读/写访问权限并且不共享

  2. FileStream类的Length属性

    其返回值以字节为单位,函数签名如下:

    1
    public override long Length { get; }

和文件相关的操作,需要引入命名空间System.IO

代码示例

1
2
3
4
5
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
label1.Text = ((File.Open(openFileDialog.FileName, FileMode.Open).Length/1024.00)/1024.00).ToString() + "MB";
}
image-20220627195222408

获取文件拓展名

方法说明

获取文件拓展名主要是在字符串上进行操作,截断最后的.xxx返回,需要使用如下函数签名:

1
public String Substring(int startIndex, int length);
  • startIndex:子字符串的起始字符位置
  • length:要截取的字符数
  • 返回值:截取的字符串

代码示例

1
2
3
4
5
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
label1.Text = openFileDialog.FileName.Substring(openFileDialog.FileName.LastIndexOf(".") + 1, openFileDialog.FileName.Length - openFileDialog.FileName.LastIndexOf(".")-1).ToString();
}
image-20220627202108851

获取文件创建时间

方法说明

需要使用FileInfo类,该类型主要提供创建,复制,删除,移动和打开文件的实例方法。函数签名如下:

1
public DateTime CreationTime { get; set; }

代码示例

1
2
3
4
5
6
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
FileInfo fileInfo = new FileInfo(openFileDialog.FileName);
label1.Text = fileInfo.CreationTime.ToString();
}
image-20220627202907830

获取文件最后一次修改时间

方法说明

同样的需要使用到FileInfo类的LastWriteTime属性,函数签名如下:

1
public DateTime LastWriteTime { get; set; }

代码示例

1
2
3
4
5
6
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
FileInfo fileInfo = new FileInfo(openFileDialog.FileName);
label1.Text = fileInfo.LastWriteTime.ToString();
}
image-20220627203515373

获取文件名中禁止使用的字符

在 Win 系统中创建文件时,存在部分非法字符,系统会提示错误,获取非法字符有哪些是本实例要做的。

方法说明

主要使用到了Path类的GetInvalidFileNameChars方法,其函数签名如下:

1
public static char[] GetInvalidFileNameChars();
  • 返回值:char类型的数组,包含所有非法字符

代码示例:

1
2
3
4
foreach(char c in Path.GetInvalidFileNameChars())
{
richTextBox1.Text += c+"\n";
}
image-20220627204517425

文件的创建和删除

创建和删除文件

方法说明

使用到了File类的CreateDelete方法:

  • File类的Create方法,函数签名如下:

    1
    public static FileStream Create(string path);
    • path:文件路径和名称
    • 返回值:FileStream类,可以对路径文件进行读写

    如果路径文件存在,该方法会覆盖文件创建新文件

  • File类的Delete方法,函数签名如下:

    1
    public static void Delete(string path);
    • path:指定路径文件

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
string filename;
private void button1_Click(object sender, EventArgs e)
{

SaveFileDialog saveFileDialog = new SaveFileDialog();
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
filename = saveFileDialog.FileName;
FileStream fileStream = File.Create(saveFileDialog.FileName);
MessageBox.Show("创建文件成功");
fileStream.Close();
}
}

private void button2_Click(object sender, EventArgs e)
{
File.Delete(filename);
}
image-20220627210709513

生成随机文件名或者文件夹名

方法说明

需要用到**Guid(全局唯一标识符)**类的NewGuid方法,其函数签名如下:

1
public static Guid NewGuid();

全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID 的总数达到了 2^128(3.4×10^38)个,所以随机生成两个相同GUID的可能性非常小,但并不为0。所以,用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//创建文件
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
{
File.Create(folderBrowserDialog.SelectedPath + Guid.NewGuid().ToString() + ".txt").Close();
}
}

//创建文件夹
private void button2_Click(object sender, EventArgs e)
{
FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
{
Directory.CreateDirectory(folderBrowserDialog.SelectedPath + Guid.NewGuid().ToString());
}
}
image-20220627213350466

建立临时文件

当用户在程序中新建一个文件时,但是尚未保存和命名时,所有建立的文件都是保存在内存中的,显然这样做是很危险的。如果突然死机或者其他原因造成了程序在未保存文件之前就关闭,那么将损失严重。如果在文件建立的同时在就磁盘中存储数据,将不会造成如上损失。这个时候就需要创建临时文件来保存数据。

方法说明

需要先使用Path类的GetTempFileName方法获得临时文件名称,然后使用FileInfo类的AppendText方法向临时文件写入数据。

===============

待更新……’