一、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读写权限辖;
读入字节取长度,避免空串乱码差;
写入字符转字节,关闭释放不能落。