C# FileStream 文件流 全套完整笔记

一、FileStream 核心作用

FileStream 文件流 :专门用于对本地文件进行 读取、写入 操作。

区别于数组/集合:数组数据存在内存,程序关闭数据丢失;文件流属于持久化存储,数据保存在本地硬盘,永久保存。

必备命名空间:using System.IO;using System.Text;


二、文件路径两种写法(必考)

1. 绝对路径

从电脑根目录完整路径,固定不变

示例:C:\Users\Administrator\Desktop\img\22.jpg

2. 相对路径(项目最常用)

相对于程序 bin/Debug 运行目录

  • 新建文本文档.txt / ./新建文本文档.txt:同级目录(Debug文件夹内)

  • ../:返回上一级目录


三、FileStream 构造函数三大核心参数

new FileStream(路径, 文件打开模式, 读写权限)

1. 第一个参数:文件路径

绝对路径 / 相对路径,建议字符串加 **@**防止转义字符报错

2. 第二个参数:FileMode 文件打开模式

  • FileMode.Open:打开已有文件,文件不存在则报错(多用于读取)

  • FileMode.CreateNew:新建文件,文件已存在则报错

  • FileMode.Create:有则覆盖、无则新建(多用于写入)

3. 第三个参数:FileAccess 读写权限

  • FileAccess.Read:只读权限

  • FileAccess.Write:只写权限

  • FileAccess.ReadWrite:读写权限


四、文件读取完整流程(标准五步)

创建文件流 → 定义缓存字节数组 → Read读取字节 → 字节转字符串 → 关闭+释放资源

cs 复制代码
// 1. 创建文件流、只读打开文件
FileStream file = new FileStream(@"新建文本文档.txt", FileMode.Open, FileAccess.Read);

// 2. 定义字节数组缓冲区(5M缓存)
byte[] bytes = new byte[1024 * 1024 * 5];

// 3. 读取文件到字节数组,返回【有效数据长度】
int length = file.Read(bytes, 0, bytes.Length);

// 4. 字节数组转字符串(必须使用有效长度length,避免多余空字符)
string s = Encoding.UTF8.GetString(bytes, 0, length);
Console.WriteLine(s);

// 5. 关闭流 + 释放资源
file.Close();
file.Dispose();

读取核心考点

  • Read返回值int :代表本次读取到的真实有效字节数

  • 字节数组会默认补0,必须根据length截取有效数据,否则文本末尾乱码、空字符

  • 读取文件必须用 Open + Read 组合


五、文件写入完整流程

创建内容字符串 → 字符串转字节数组 → Write写入文件 → 关闭释放

cs 复制代码
// 1. 创建文件流,存在则覆盖,不存在则新建,只写权限
FileStream file = new FileStream(@"1.txt", FileMode.Create, FileAccess.Write);

// 2. 定义写入内容
string info = "后天就回家可以休息了";

// 3. 字符串转字节数组
byte[] bs = Encoding.Default.GetBytes(info);

// 4. 写入数据
file.Write(bs, 0, bs.Length);

// 5. 关闭释放资源
file.Close();
file.Dispose();

写入核心考点

  • 写入优先使用 FileMode.Create,自动覆盖旧文件

  • 写入必须将 string 转为 byte\[\],文件流只识别字节


六、按钮读取文件(实战案例)

cs 复制代码
private void button1_Click(object sender, EventArgs e)
{
    // 打开文件、只读
    FileStream fileStream = new FileStream(@"1.txt",FileMode.Open,FileAccess.Read);
    
    // 5M缓存数组
    byte[] buffer = new byte[1024*1024*5];
    
    // 获取有效长度
    int length=  fileStream.Read(buffer, 0, buffer.Length);
    
    // 字节转文本,展示到Label
    string info =  Encoding.Default.GetString(buffer, 0, length);
    label1.Text = info;

    // 释放资源
    fileStream.Close();
    fileStream.Dispose();
}

七、编码格式说明

  • Encoding.UTF8:通用标准编码,适合绝大多数文本文件

  • Encoding.Default:系统默认编码,适合本地Windows文本


八、高频易错点(考试必坑)

  • 文件操作必须 Close + Dispose,否则文件被占用、无法二次编辑

  • 读取转字符串必须传 length,不能直接全转数组,否则出现大量空白字符

  • 路径不带@会导致转义报错,路径字符串建议必加@

  • 读写权限必须匹配:只读不能写、只写不能读

  • FileMode.Open 读取不存在的文件会直接报错


九、FileStream 专属背诵口诀

文件流IO持久化,路径相对绝对化;

Mode打开创建覆写,Access读写权限辖;

读入字节取长度,避免空串乱码差;

写入字符转字节,关闭释放不能落。