目录
一、File类vsFileInfo类
1.File类
(1)示例源码
(2)生成效果
2.FileInfo类
(1)示例源码
(2)生成效果
二、 Directory类vsDirectoryInfo类
1.Directory类
(1)示例源码
(2)生成效果
2.DirectoryInfo类
(1)示例源码
(2)生成效果
System.IO命名空间包含允许在数据流和文件中进行同步和异步读取及写入的类型。
文件和流的差异:文件是一些具有永久存储及特定顺序的字节组成的一个有序的、具有名称的集合。流提供一种向后备存储写入字节和从后备存储读取字节的方式。
System.IO命名空间中的类及说明如表:
类 | 说 明 |
BinaryReader | 用特定的编码将基元数据类型读作二进制值 |
Binary Writer | 以二进制形式将基元类型写入流,并支持用特定的编码写入字符串 |
BufferedStream | 给另一流上的读写操作添加一个缓冲层。无法继承此类 |
Directory | 公开用于创建、移动、枚举、删除目录和子目录的静态方法。无法继承此类 |
DirectoryInfo | 公开用于创建、移动和枚举目录和子目录的实例方法。无法继承此类 |
DriveInfo | 提供对有关驱动器的信息的访问 |
File | 提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建FileStream对象 |
FileInfo | 提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建FileStream对象。无法继 |
FileStream | 公开以文件为主的Stream,既支持同步读写操作,也支持异步读写操作 |
FileSystemInfo | 为FileInfo和DirectoryInfo对象提供基类 |
FileSystemWatcher | 侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件 |
MemoryStream | 创建其支持存储区为内存的流 |
Path | 对包含文件或目录路径信息的String实例执行操作。这些操作是以跨平台的方式执行的 |
StreamReader | 实现一个TextReader,使其以一种特定的编码从字节流中读取字符 |
StreamWriter | 实现一个TextWriter,使其以一种特定的编码向流中写入字符 |
StringReader | 实现从字符串进行读取的TextReader |
StringWriter | 实现一个用于将信息写入字符串的TextWriter。该信息存储在基础StringBuilder中 |
TextReader | 表示可读取连续字符系列的读取器 |
TextWriter | 表示可以编写一个有序字符系列的编写器。该类为抽象类 |
一、File类vsFileInfo类
1.File类
File类和Directory类分别用来对文件和各种目录进行操作,这两个类可以被实例化,但不能被其他类继承。
File类支持对文件的基本操作,它包括用于创建、复制、删除、移动和打开文件的静态方法,并协助创建FileStream对象。File类中一共包含40多个方法。
- 由于File类中的所有方法都是静态的,所以如果只想执行一个操作,那么使用File类中方法的效率比使用相应的FileInfo类中的方法可能更高。
- File类的静态方法对所有方法都执行安全检查,因此,如果打算多次重用某个对象,可考虑改用FileInfo类中的相应方法,因为并不总是需要安全检查。
虽然,使用与文件、文件夹及流相关的类时,首先需要添加System.IO命名空间。但.NET 7.0、 .NET 8.0下不需要添加,因为已经被默认支持了。
方 法 | 说 明 |
Copy | 将现有文件复制到新文件 |
Create | 在指定路径中创建文件 |
Delete | 删除指定的文件。如果指定的文件不存在,则不引发异常 |
Exists | 确定指定的文件是否存在 |
Move | 将指定文件移到新位置,并提供指定新文件名的选项 |
Open | 打开指定路径上的FileStream |
CreateText | 创建或打开一个文件用于写入UTF-8编码的文本 |
GetCreationTime | 返回指定文件或目录的创建日期和时间 |
GetLastAccessTime | 返回上次访问指定文件或目录的日期和时间 |
GetLastWriteTime | 返回上次写入指定文件或目录的日期和时间 |
OpenRead | 打开现有文件以进行读取 |
OpenText | 打开现有UTF-8编码文本文件以进行读取 |
OpenWrite | 打开现有文件以进行写入 |
ReadAllBytes | 打开一个文件,将文件的内容读入一个字符串,然后关闭该文件 |
RcadAllLines | 打开一个文本文件,将文件的所有行都读入一个字符串数组,然后关闭该文件 |
ReadAllText | 打开一个文本文件,将文件的所有行读入一个字符串,然后关闭该文件 |
Replace | 使用其他文件的内容替换指定文件的内容,这一过程将删除原始文件,并创建被替换文件的 备份 |
SetCreationTime | 设置创建该文件的日期和时间 |
SetLastAccessTime | 设置上次访问指定文件的日期和时间 |
SetLastWriteTime | 设置上次写入指定文件的日期和时间 |
WriteAllBytes | 创建一个新文件,在其中写入指定的字节数组,然后关闭该文件。如果目标文件已存在,则改 写该文件 |
WriteAllLines | 创建一个新文件,在其中写入指定的字符串,然后关闭文件。如果目标文件已存在,则改写该 文件 |
WriteAllText | 创建一个新文件,在文件中写入内容,然后关闭文件。如果目标文件已存在,则改写该文件 |
(1)示例源码
// File
namespace _01
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){label1.Text = "文件名:";button1.Text = "创建";label1.AutoSize = true;textBox1.Size = new Size(150, 23);}private void Button1_Click(object sender, EventArgs e){if (textBox1.Text == string.Empty) //判断输入的文件名是否为空{MessageBox.Show("文件名不能为空!");}else{if (File.Exists(textBox1.Text)) //使用File类的Exists方法判断要创建的文件是否存在{MessageBox.Show("该文件已经存在");}else{File.Create(textBox1.Text); //使用File类的Create方法创建文件}}}}
}
(2)生成效果
文件位置:F:\C#_TM\chapter20\01\bin\Debug\net8.0-windows\wenchm.txt
如果还未生成过,第一次按下按钮则生成文件,再次按下按钮则警示。
2.FileInfo类
使用FileInfo类和DirectoryInfo类可以方便地对文件和文件夹进行操作。
FileInfo类和File类之间许多方法调用都是相同的,但是FileInfo类没有静态方法,该类中的方法仅可以用于实例化的对象。File类是静态类,所以它的调用需要字符串参数为每一个方法调用规定文件位置。因此如果要在对象上进行单一方法调用,则可以使用静态File类,在这种情况下静态调用速度要快一些,因为.NET框架不必执行实例化新对象并调用其方法的过程。如果要在文件上执行几种操作,则实例化FileInfo对象使用其方法就更好一些。这样会提高效率,因为对象将在文件系统上引用正确的文件,而静态类就必须每次都寻找文件。
如果想要对某个对象进行重复操作,应使用FileInfo类。
属 性 | 说 明 |
CreationTime | 获取或设置当前 FileSystemInfo 对象的创建时间 |
Directory | 获取父目录的实例 |
DirectoryName | 获取表示目录的完整路径的字符串 |
Exist | 获取指示文件是否存在的值 |
Extension | 获取表示文件扩展名部分的字符串 |
FullName | 获取目录或文件的完整目录 |
IsReadOnly | 获取或设置确定当前文件是否为只读的值 |
LastAccessTime | 获取或设置上次访问当前文件或目录的时间 |
LastWriteTime | 获取或设置上次写入当前文件或目录的时间 |
Length | 获取当前文件的大小 |
Name | 获取文件名 |
(1)示例源码
// FileInfo
namespace _03
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){label1.Text = "文件路径及名称:";button1.Text = "创建";label1.AutoSize = true;textBox1.Size = new Size(190, 23);}private void Button1_Click(object sender, EventArgs e){if (textBox1.Text == string.Empty) //判断输入的文件名称是否为空{MessageBox.Show("文件名称不能为空!");}else{FileInfo finfo = new(textBox1.Text);if (finfo.Exists) //使用FileInfo对象的Exists属性判断要创建的文件是否存在{MessageBox.Show("该文件已经存在");}else{finfo.Create(); //使用FileInfo对象的Create方法创建文件}}} }
}
(2)生成效果
文件及路径:F:\C#_TM\chapter20\03\bin\Debug\net8.0-windows\wenchm.txt
如果还未生成过,第一次按下按钮则生成文件,再次按下按钮则警示。
二、 Directory类vsDirectoryInfo类
1.Directory类
Directory类公开了用于创建、移动、枚举、删除目录和子目录的静态方法。在用Directory类对文件夹进行操作时,其文件夹的路径必须正确,否则会触发异常。
方 法 | 说 明 |
CreateDirectory | 创建指定路径中的所有目录 |
Delete | 删除指定的目录 |
Exists | 确定给定路径是否引用磁盘上的现有目录 |
GetCreationTime | 获取目录的创建日期和时间 |
GetDirectories | 获取指定目录中子目录的名称 |
GetDirectoryRoo | 返回指定路径的卷信息、根信息或二者同时返回 |
GetFiles | 返回指定目录中的文件的名称 |
GetFileSystemEntries | 返回指定目录中所有文件和子目录的名称 |
GetLastAccessTime | 返回上次访问指定文件或目录的日期和时间 |
GetLastWriteTime | 返回上次写入指定文件或目录的日期和时间 |
GetParent | 检索指定路径的父目录,包括绝对路径和相对路径 |
Move | 将文件或目录及其内容移到新位置 |
SetCreationTime | 为指定的文件或目录设置创建日期和时间 |
SetCurrentDirectory | 将应用程序的当前工作目录设置为指定的目录 |
SetLastAccessTime | 设置上次访问指定文件或目录的日期和时间 |
SetLastWriteTime | 设置上次写入目录的日期和时间 |
(1)示例源码
// Directory
namespace _02
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){label1.Text = "文件夹路径及名称:";button1.Text = "创建";label1.AutoSize = true;textBox1.Size = new Size(210, 23);}private void Button1_Click(object sender, EventArgs e){if (textBox1.Text == string.Empty) //判断输入的文件夹名称是否为空{MessageBox.Show("文件夹名称不能为空!");}else{if (Directory.Exists(textBox1.Text)) //使用Directory类的Exists方法判断要创建的文件夹是否存在{MessageBox.Show("该文件夹已经存在");}else{Directory.CreateDirectory(textBox1.Text); //使用Directory类的CreateDirectory方法创建文件夹}}}}
}
(2)生成效果
路径:F:\C#_TM\chapter20\02\bin\Debug\net8.0-windows
如果还未生成过,第一次按下按钮则生成文件,再次按下按钮则警示。
2.DirectoryInfo类
DirectoryInfo类和Directory类之间的关系与FileInfo类和File类之间的关系十分类似。
属 性 | 说 明 |
CreationTime | 获取或设置当前FileSystemlnfo对象的创建时间 |
Exists | 获取指示目录是否存在的值 |
Extension | 获取表示文件扩展名部分的字符串 |
FullName | 获取目录或文件的完整目录 |
LastAccessTime | 获取或设置上次访问当前文件或目录的时间 |
LastWriteTime | 获取或设置上次写入当前文件或目录的时间 |
Name | 获取Directorylnfo实例的名称 |
Parent | 获取指定子目录的父目录 |
Root | 获取路径的根部分 |
(1)示例源码
// DirectoryInfo
namespace _04
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){label1.Text = "文件夹路径及名称:";button1.Text = "创建";label1.AutoSize = true;textBox1.Size = new Size(210, 23);}private void Button1_Click(object sender, EventArgs e){if (textBox1.Text == string.Empty) //判断输入的文件夹名称是否为空{MessageBox.Show("文件夹名称不能为空!");}else{DirectoryInfo dinfo = new(textBox1.Text); //实例化DirectoryInfo类对象if (dinfo.Exists) //使用DirectoryInfo对象的Exists属性判断要创建的文件夹是否存在{MessageBox.Show("该文件夹已经存在");}else{dinfo.Create(); //使用DirectoryInfo对象的Create方法创建文件夹}}}}
}
(2)生成效果
路径: F:\C#_TM\chapter20\04\bin\Debug\net8.0-windows
如果还未生成过,第一次按下按钮则生成文件,再次按下按钮则警示。