C#中读写文本文件最推荐使用File类静态方法,如ReadAllText/WriteAllText,简单安全且默认UTF-8;大文件或需逐行处理时用StreamReader/StreamWriter并配合using;注意编码统一与异常处理。

在C#中读写文本文件最常用、最推荐的方式是使用 System.IO.File 类提供的静态方法,简单直接、不易出错。对于需要逐行处理或控制缓冲、编码等细节的场景,再考虑 StreamReader 和 StreamWriter。
用 File.ReadAllText / File.WriteAllText 快速读写整个文件
适合内容不大(几MB以内)、不需要边读边处理的场景。自动处理文件打开、关闭和资源释放,编码默认为 UTF-8(不含 BOM),也可显式指定。
- 读取全部文本:string content = File.ReadAllText("data.txt");
- 读取并指定编码:string content = File.ReadAllText("data.txt", Encoding.UTF8);
- 写入文本(覆盖):File.WriteAllText("output.txt", "Hello, World!");
- 追加写入(不覆盖):File.AppendAllText("log.txt", "[INFO] Task completed.\n");
用 StreamReader / StreamWriter 精确控制读写过程
适合大文件、需要逐行处理、或必须自定义编码/缓冲区大小的场景。务必用 using 语句确保资源及时释放。
- 逐行读取(推荐用于日志、配置等):
using (var reader = new StreamReader("input.txt", Encoding.Default)) {
string line;
while ((line = reader.ReadLine()) != null) {
Console.WriteLine(line);
}
} - 写入多行文本:
using (var writer = new StreamWriter("result.txt", false)) {
writer.WriteLine("第一行");
writer.Write("第二行不换行");
writer.WriteLine(" —— 已完成");
}
注意编码和换行符的兼容性
Windows 默认用 \r\n,Linux/macOS 用 \n;不同编码(如 GB2312、UTF-8 with BOM)可能导致中文乱码。建议统一用 Encoding.UTF8,避免用 Encoding.Default(依赖系统区域设置)。
这本书假定你没有任何关于脚本或一般程序的编程知识, 但是如果你具备相关的知识, 那么你将很容易就能够达到中高级的水平. . . 所有这些只是UNIX®浩瀚知识的一小部分. 你可以把本书作为教材, 自学手册, 或者是关于shell脚本技术的文档. 书中的练习和样例脚本中的注释将会与读者进行更好的互动, 但是最关键的前提是: 想真正学习脚本编程的唯一途径就是亲自动手编写脚本. 这本书也可作为教材来讲解一般的编程概念. 向伟大的中华民族的Linux用户致意! 我希望这本书能够帮助你们学习和理解L
- 保存带 BOM 的 UTF-8(部分旧程序需要):new UTF8Encoding(true)
- 无 BOM 的 UTF-8(现代推荐):Encoding.UTF8(.NET Core/.NET 5+ 默认就是无 BOM)
- 读取 GB2312 编码文件:File.ReadAllText("old.txt", Encoding.GetEncoding("GB2312"))
异常处理与路径安全
文件操作容易因权限、路径不存在、文件被占用等失败,建议包裹 try-catch,并用 Path.Combine 拼接路径防止斜杠错误。
- 安全拼路径:string path = Path.Combine("Logs", "app_" + DateTime.Now.ToString("yyyyMMdd") + ".txt");
- 检查文件是否存在再读:if (File.Exists(path)) { ... }
- 捕获常见异常:catch (UnauthorizedAccessException) { /* 权限不足 */ }
catch (IOException) { /* 文件正被其他程序使用 */ }
基本上就这些。日常开发中,90% 的文本读写用 File.ReadAllText 和 File.WriteAllText 就够了;需要精细控制时再上 StreamReader/Writer。不复杂但容易忽略编码和异常,留个心眼就好。









