字符编码,文件读写
理解字符编码原理与常见编码
掌握 File 类快速读写文本
掌握流式读写的使用
核心讲解
(1)字符编码
计算机存储的是二进制,文字和二进制的转换规则就是编码。
ASCII:英文,1 字节
GBK:国标,中文 2 字节
UTF-8:国际通用,中文 3 字节,推荐使用
乱码原因:编码和解码用的标准不一致
C# 默认编码:UTF-8
(2)File 静态类
快速读写整个文件,简单方便,适合小文件。
File.ReadAllText():读全部文本File.WriteAllText():写全部文本File.ReadAllLines():按行读,返回字符串数组File.WriteAllLines():按行写File.Copy()、File.Move()、File.Delete():文件操作
(3)流式读写
适合大文件、逐行处理,内存占用小。
StreamReader:文本读取,ReadLine()StreamWriter:文本写入自动释放资源:
using语句
操作步骤
用 File 类读写文本文件
用 StreamReader 逐行读取
运行验证,查看生成的文件
代码示例
using System.IO;
using System.Text;
string filePath = "test.txt";
// ===== 1. File 快速读写 =====
// 写文件
File.WriteAllText(filePath, "第一行内容\n第二行:C#文件读写\n", Encoding.UTF8);
// 追加内容
File.AppendAllText(filePath, "第三行:追加的内容\n");
// 读文件
string content = File.ReadAllText(filePath, Encoding.UTF8);
Console.WriteLine("文件内容:");
Console.WriteLine(content);
// 按行读
string[] lines = File.ReadAllLines(filePath);
Console.WriteLine($"共{lines.Length}行:");
foreach (string line in lines)
Console.WriteLine(line);
// ===== 2. 流式逐行读取 =====
Console.WriteLine("\n流式读取:");
using (StreamReader reader = new StreamReader(filePath, Encoding.UTF8))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
} // using 结束自动释放
// ===== 3. 文件操作 =====
File.Copy(filePath, "copy.txt", true);
Console.WriteLine("\n文件复制完成");
Console.ReadKey();
常见误区
不指定编码:默认 UTF-8 一般没问题,但显式指定更稳妥,避免乱码
流用完不关闭:会占用文件资源,一定要 Close 或者用 using 自动释放
字符流读二进制文件:图片、视频等要用 FileStream 字节流,用字符流会损坏
相对路径找不到文件:相对路径是相对于程序运行目录,不是代码文件目录
课后练习
写一个文件,写入你的姓名、年龄、专业,每行一个
用 StreamReader 逐行读取并输出
实现一个文件复制功能
说明 File 类和 StreamReader 的区别和适用场景

