C# 简单的文件流操作
文件是任何应用程序开发时必不可少的操作,.NET框架提供的文件操作基本都位于 System.IO 命名空间之下
我们就可以在该命名空间下通过相应的类进行文件、目录以及数据流的操作
C# I/O 类
-
File 类:提供用于创建、复制、删除、移动和打开文件的静态方法
-
FileInfo 类:提供创建、复制、删除、移动和打开文件夹的属性和实例方法
-
FileStream 类:主要用于读取磁盘上的文件或者向磁盘文件写入信息
-
Path 类:主要是用来操作文件路径
-
MemoryStream 类:主要用于操作内存中的数据
-
BufferedStream 类:主要也是用来处理流数据的,但是该类主要的功能是用来封装其他流类
-
NetworkStream 类:主要是专门用来处理服务器与客户端通信的流数据
-
StreamReader/StreamWriter 类:主要用来处理流数据,它们分别提供了高效的文本流读取/写入功能
-
Stream 类,TextReader 类,TextWrite 类,BinaryReader 类,BinaryWrite 类都继承了 IDisposable 接口,所以使用后必须关闭流
File 和 FileInfo 类
这两个类用来操作硬盘上的文件:
File 类主要通过静态方法实现;而 FileInfo 类则是通过实例方法实现的
成员 | 说明 |
AppendText | 创建一个 StreamWrite 类型,用于追加文本 |
Create | 指定文件下创建或者覆盖文件 |
Delete | 删除指定文件 |
Exists | 检查文件是否存在 |
Open | 指定特有的读取权限打开文件 |
OpenRead | 以读取的方式打开现有文件 |
OpenWrite | 打开或者创建一个现有文件,以写入文本 |
ReadAllText | 读取文件的所有行,然后关闭文件 |
WriteAllText | 写入指定的字符串,然后关闭文件 |
FileInfo 类的实例成员提供了和 File 类差不多的功能,在大多数情况下它们可以互换进行使用
但由于 File 类提供的方法都是静态方法,使用的频率较高
🙌🌰:
1 static void Main(string[] args) 2 { 3 FileStream file; 4 StreamWriter writer; 5 // 文件路径 6 string path = "Test.txt"; 7 // 判断文件是否存在 8 if (!File.Exists(path)) 9 { 10 // 创建指定文件 11 file = File.Create(path); 12 Console.WriteLine("新建一个文件:{0}", path); 13 } 14 else 15 { 16 // 打开指定文件 17 file = File.Open(path, FileMode.Open); 18 Console.WriteLine("该文件已存在,直接打开文件"); 19 } 20 // 写入新的文本数据 21 writer = new StreamWriter(file); 22 writer.WriteLine("新增加的测试文本"); 23 // 清除缓冲区并关闭对象 24 writer.Flush(); 25 writer.Close(); 26 // 关闭当前数据流 27 file.Close(); 28 Console.ReadKey(); 29 }
Directory 和 DirectoryInfo 类
这两个类都包含了用来创建、移动、删除和枚举所有目录或者子目录的成员
成员 | 说明 |
CreateDirectory | 在指定路径下创建目录和子目录 |
Delete | 删除指定目录 |
Exists | 检查目录是否存在 |
GetFiles | 获得目录下所有文件名称的数组 |
GetParent | 获得指定目录的父目录 |
GetCurrentDirectory | 获取应用程序当前的工作目录 |
Move | 移动目录 |
DirectoryInfo 类的功能同样与 Directory 类似,所以大多数情况下两者可以互换进行使用
🙌🌰:
1 static void Main(string[] args) 2 { 3 // 获取当前目录路径 4 string dirPath = Directory.GetCurrentDirectory(); 5 Console.WriteLine("当前路径:" + dirPath); 6 // 新文件路径 7 string filePath = string.Format("{0}/{1}", dirPath, "Test.txt"); 8 // 判断路径文件是否存在 9 if (!Directory.Exists(dirPath)) 10 { 11 // 创建指定目录 12 Directory.CreateDirectory(dirPath); 13 Console.WriteLine("创建一个新的目录{0}", dirPath); 14 } 15 else 16 Console.WriteLine("目录{0}已存在", dirPath); 17 // 创建文件实例 18 FileInfo file = new FileInfo(filePath); 19 // 判断文件是否存在 20 if (!file.Exists) 21 { 22 // 创建指定文件 23 file.Create(); 24 Console.WriteLine("创建一个新的文件"); 25 } 26 else 27 Console.WriteLine("该文件已存在"); 28 // 获取路径下所有文件(包括路径) 29 string[] files = Directory.GetFiles(dirPath, "*", SearchOption.AllDirectories); 30 Console.WriteLine("目录{0}下共{1}个文件", dirPath, files.Length); 31 // 显示所有文件名称 32 for (int i = 0; i < files.Length; i++) 33 { 34 DirectoryInfo fileInfo = new DirectoryInfo(files[i]); 35 Console.WriteLine(fileInfo.Name); 36 } 37 Console.ReadKey(); 38 }
流: Stream 类
流可以理解为内存中的字节序列,而 Stream 是所有流的抽象基类,每个具体的存储实体都可以通过 Stream 派生类来实现
同样的,流也涉及三个基本操作:
-
对流进行读取:将流中的数据读取到具体的数据结构中
-
对流进行写入:把数据结构中的数据写入到流中
-
对流进行查找:对流内当前位置进行查询和修改
成员 | 说明 |
CanRead | 检查当前流是否支持读取操作 |
CanSeek | 检查当前流是否支持查找操作 |
CanWrite | 检查当前流是否支持写入操作 |
Length | 获取用字节表示的流的长度 |
Position | 设置当前流中的位置 |
BeginRead | 开始异步读操作 |
BeginWrite | 开始异步写操作 |
Close | 关闭当前流并且释放资源 |
EndRead | 等待异步读操作完成 |
EndWrite | 等待异步写操作完成 |
Flush | 清除当前流的缓冲区,并且将数据写入存储设备 |
Write | 向当前流写入字节序列 |
🙌🌰:
1 static void Main(string[] args) 2 { 3 // 文件路径 4 string filePath = "Test.txt"; 5 // 创建或打开指定文件 6 using (FileStream fileStream = File.Open(filePath, FileMode.OpenOrCreate)) 7 { 8 // 字符串数据 9 string msg = "Hello World!"; 10 // 写入数据 11 StreamWriter streamWrite = new StreamWriter(fileStream); 12 Console.WriteLine("开始写入数据"); 13 streamWrite.Write(msg); 14 // 读取数据 15 Console.WriteLine("写入的数据为:"); 16 StreamReader streamReader = new StreamReader(fileStream); 17 string str = streamReader.ReadToEnd(); 18 Console.WriteLine(str); 19 // 关闭当前流 20 streamWrite.Close(); 21 streamReader.Close(); 22 } 23 Console.ReadKey(); 24 }
详细的文件操作
文件操作包括但不限于文件的创建、删除、移动、复制和查询等操作
详细的文件操作可以参考 ☛ 相应的博文内容
*** | 以上内容仅为学习参考、学习笔记使用 | ***