C#基础知识之FileStream
C#基础知识之FileStream
什么是FileStream?
在C#中,FileStream是操作文件的一个类。通过FileStream,可以对一个文件进行读取、写入、修改等操作。在进行文件处理时,FileStream是一个非常重要的工具。
FileStream的基本用法
创建FileStream对象时,会需要传递文件的路径、文件打开方式等参数。常见的打开方式有:
- FileMode.Create:创建一个新文件。如果文件已经存在,就先清空原有内容
- FileMode.CreateNew:创建一个新文件。如果文件已经存在,会抛出异常
- FileMode.Open:打开一个已经存在的文件
- FileMode.OpenOrCreate:如果文件存在,就打开文件;如果文件不存在,就创建一个新文件。
创建FileStream对象示例:
FileStream fs = new FileStream("test.txt", FileMode.Create);接下来可以通过FileStream对象调用Read()、Write()等方法进行操作,并最终使用Close()方法关闭文件流。
这样使用FileStream可能会存在文件打开后忘记关闭的问题,为了避免这种情况,可以使用using语句块。这样在代码执行完成后,会自动关闭FileStream对象。
使用using语句块示例:
using (FileStream fs = new FileStream("test.txt", FileMode.Create)) { // Write操作 // ...} FileStream的读写操作
写操作
使用FileStream进行写操作时,会调用Write()方法。Write方法有多个不同参数的重载,最常用的是将字符串写入文件的方法。
使用Write方法进行字符串写入示例:
using (FileStream fs = new FileStream("test.txt", FileMode.Create)) { string msg = "Hello, C# FileStream!"; byte[] buffer = Encoding.Default.GetBytes(msg); fs.Write(buffer, 0, buffer.Length); } 读操作
使用FileStream进行读操作时,会调用Read()方法。Read()方法有多个不同参数的重载,最常用的是读取文件所有字节的方法。
使用Read方法读取文件内容并输出示例:
using (FileStream fs = new FileStream("test.txt", FileMode.Open)) { byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); string msg = Encoding.Default.GetString(buffer); Console.WriteLine(msg); } FileStream注意事项
- 在使用FileStream时,需要保证文件是可访问的
- 在写入操作时,需要注意文件是否存在。如果想要创建新文件,一定要使用Create或CreateNew方式
- 在结束一个操作时,一定要关闭文件流。这可以使用Close()方法,或者使用using语句块
示例
读取二进制文件内容并写入新文件
// 读取源文件内容using (FileStream from = new FileStream("test.dat", FileMode.Open)){ byte[] buffer = new byte[from.Length]; from.Read(buffer, 0, buffer.Length); // 将内容写入新文件 using (FileStream to = new FileStream("test_copy.dat", FileMode.Create)) { to.Write(buffer, 0, buffer.Length); }}读取文件夹中的所有文件内容,并统计文件总字节数
// 声明文件夹路径string directoryPath = @"D:\test_folder\";// 获取文件夹中的所有文件string[] files = Directory.GetFiles(directoryPath);// 遍历所有文件,计算总字节数int totalBytes = 0;foreach(string file in files){ using (FileStream fs = new FileStream(file, FileMode.Open)) { totalBytes += (int)fs.Length; }}Console.WriteLine("The total bytes of all files is: " + totalBytes);