FileStream是C#中位于System.IO命名空间下的类,用于以流的形式对文件进行读写操作,支持同步和异步两种操作模式,能够处理各种类型文件的底层数据交互。

FileStream的核心构造参数
使用FileStream前需要先了解它的常用构造函数参数,这些参数决定了文件的操作方式和权限:
- path:要操作的文件路径,支持绝对路径和相对路径
- mode:文件打开模式,常用值有FileMode.Create(新建文件,存在则覆盖)、FileMode.Open(打开现有文件)、FileMode.Append(打开文件追加内容)
- access:文件访问权限,常用值有FileAccess.Read(只读)、FileAccess.Write(只写)、FileAccess.ReadWrite(读写)
- share:文件共享权限,决定其他进程对该文件的访问方式,比如FileShare.Read允许其他进程同时读取该文件
使用FileStream写入文件
写入文件时需要将字符串转换为字节数组,再通过Write方法写入流中,操作完成后要记得关闭流释放资源。
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
string filePath = "test.txt";
string content = "这是使用FileStream写入的测试内容";
// 将字符串转换为字节数组,使用UTF8编码
byte[] data = Encoding.UTF8.GetBytes(content);
// 创建FileStream对象,模式为新建文件,权限为只写
using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
// 写入字节数组
fs.Write(data, 0, data.Length);
Console.WriteLine("文件写入完成");
}
}
}
上面的代码使用了using语句,能够自动释放FileStream资源,避免手动调用Close方法遗漏导致资源泄露。
使用FileStream读取文件
读取文件时需要先创建字节数组作为缓冲区,再将流中的字节读取到数组中,最后转换为字符串输出。
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
string filePath = "test.txt";
// 创建FileStream对象,模式为打开现有文件,权限为只读
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
// 创建和文件大小一致的字节数组作为缓冲区
byte[] buffer = new byte[fs.Length];
// 读取流中的字节到缓冲区
int bytesRead = fs.Read(buffer, 0, buffer.Length);
// 将字节数组转换为字符串
string content = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine($"读取到的文件内容:{content}");
}
}
}
FileStream的异步操作
当处理大文件时,同步操作会阻塞主线程,此时可以使用异步方法提升程序响应速度,常用的异步方法有ReadAsync和WriteAsync。
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
string filePath = "async_test.txt";
string content = "这是异步写入的测试内容";
byte[] data = Encoding.UTF8.GetBytes(content);
// 异步写入文件
using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None, 4096, true))
{
await fs.WriteAsync(data, 0, data.Length);
Console.WriteLine("异步写入完成");
}
// 异步读取文件
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true))
{
byte[] buffer = new byte[fs.Length];
int bytesRead = await fs.ReadAsync(buffer, 0, buffer.Length);
string result = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine($"异步读取到的内容:{result}");
}
}
}
FileStream和其他文件操作类的区别
很多开发者会混淆FileStream和File类的使用场景,两者的核心区别如下:
| 对比项 | FileStream | File类 |
|---|---|---|
| 操作层级 | 底层流操作,可控制读写位置和缓冲区 | 高层封装,方法调用更简单 |
| 适用场景 | 大文件操作、需要控制读写进度、异步操作 | 小文件快速读写、简单文件操作 |
| 资源控制 | 需要手动或using语句释放资源 | 方法内部自动处理资源释放 |
使用注意事项
- 操作完成后一定要释放FileStream资源,推荐使用using语句自动释放
- 读写文件时要保证编码一致,避免出现乱码问题
- 操作不存在的文件时,要根据mode参数判断是否会自动创建文件
- 处理大文件时不要一次性将整个文件读入内存,建议分块读写
FileStreamC#文件流文件读写修改时间:2026-06-26 08:21:37