文件流是程序与外部存储设备(如硬盘、U盘等)之间传输数据的逻辑通道,它将文件抽象为连续的字节序列,程序可以通过流的方式按顺序读取或写入文件内容,不需要一次性将整个文件加载到内存中,适合处理大文件或需要分段处理文件的场景。

常用的文件读写类介绍
1. FileStream类
FileStream是.NET中最基础的文件流操作类,它直接操作字节流,可以处理任意类型的文件,包括文本文件、图片、视频等二进制文件。使用FileStream可以精确控制文件的读写位置、读写模式等参数。
以下是使用FileStream写入字节数据到文件的示例:
using System;
using System.IO;
class Program
{
static void Main()
{
// 创建FileStream对象,指定文件路径、创建模式和读写权限
using (FileStream fs = new FileStream("test.dat", FileMode.Create, FileAccess.Write))
{
// 要写入的字节数据
byte[] data = { 0x01, 0x02, 0x03, 0x04 };
// 写入数据到文件流
fs.Write(data, 0, data.Length);
Console.WriteLine("字节数据写入完成");
}
}
}
读取文件字节数据的示例:
using System;
using System.IO;
class Program
{
static void Main()
{
using (FileStream fs = new FileStream("test.dat", FileMode.Open, FileAccess.Read))
{
// 创建字节数组存储读取的数据
byte[] buffer = new byte[fs.Length];
// 读取数据到缓冲区
int bytesRead = fs.Read(buffer, 0, buffer.Length);
Console.WriteLine($"读取到{bytesRead}个字节,内容:{BitConverter.ToString(buffer)}");
}
}
}
2. StreamReader和StreamWriter类
这两个类是专门用于文本文件读写的类,它们封装了字符编码的处理逻辑,不需要开发者手动处理字节到字符的转换,使用起来比FileStream更便捷,适合处理纯文本文件。
使用StreamWriter写入文本内容的示例:
using System;
using System.IO;
class Program
{
static void Main()
{
// 创建StreamWriter对象,指定文件路径和编码
using (StreamWriter sw = new StreamWriter("text.txt", false, System.Text.Encoding.UTF8))
{
sw.WriteLine("这是第一行文本内容");
sw.WriteLine("这是第二行文本内容");
Console.WriteLine("文本写入完成");
}
}
}
使用StreamReader读取文本内容的示例:
using System;
using System.IO;
class Program
{
static void Main()
{
using (StreamReader sr = new StreamReader("text.txt", System.Text.Encoding.UTF8))
{
string line;
// 逐行读取文本内容
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine($"读取到内容:{line}");
}
}
}
}
3. File类
File是静态工具类,提供了很多静态方法可以直接完成简单的文件读写操作,不需要手动创建流对象,内部会自动处理流的创建和释放,适合简单的文件操作场景。
使用File类写入和读取文本文件的示例:
using System;
using System.IO;
class Program
{
static void Main()
{
string filePath = "simple.txt";
// 直接写入所有文本内容
File.WriteAllText(filePath, "这是通过File类写入的内容", System.Text.Encoding.UTF8);
Console.WriteLine("写入完成");
// 直接读取所有文本内容
string content = File.ReadAllText(filePath, System.Text.Encoding.UTF8);
Console.WriteLine($"读取到的内容:{content}");
}
}
不同类的适用场景对比
| 类名 | 适用场景 | 优势 |
|---|---|---|
| FileStream | 处理二进制文件、需要精确控制读写位置的大文件 | 底层操作灵活,支持任意文件类型 |
| StreamReader/StreamWriter | 处理纯文本文件,需要按行或按字符读写 | 自动处理编码,使用简单 |
| File类 | 简单的文本文件或字节文件的整体读写 | 静态方法调用方便,无需手动管理流生命周期 |
使用文件流类的注意事项
- 所有实现了
IDisposable接口的文件操作类,都需要使用using语句或者手动调用Dispose方法释放资源,避免文件句柄泄露。 - 操作文件时需要处理可能出现的异常,比如文件不存在、没有访问权限、路径格式错误等,建议使用
try-catch块包裹文件操作代码。 - 读写大文件时,不要一次性读取全部内容到内存,建议使用缓冲区分段读写,避免内存溢出。
- 使用
FileMode参数时,需要根据需求选择合适的模式,比如FileMode.Create会覆盖已有文件,FileMode.Append会在文件末尾追加内容。
文件流FileStreamStreamReaderStreamWriterFile类修改时间:2026-07-04 22:09:29