File.AppendAllText()最简单但性能差且不支持自定义编码;StreamWriter配合FileMode.Append适合频繁追加、指定编码及避免重复开闭文件,需注意线程安全与正确配置append参数。
直接用最简单,但要注意编码和异常场景;如果要频繁追加或控制流,得用配合。
用
追加一行文本最省事
适合写日志、临时记录等轻量场景,内部自动处理文件打开/关闭和编码(默认 UTF-8)。
每次调用都会重新打开文件、写入、再关闭,频繁调用性能差
不支持自定义编码(如 GB2312),硬要改就得换方式
如果文件不存在,会自动创建;路径中父目录不存在则抛
示例:
用
追加并复用流对象
适合循环写入、需指定编码、或想避免反复开闭文件的场景。
C知道
CSDN推出的一款AI技术问答工具
下载
必须显式指定
和
,否则可能覆盖原文件
推荐用
确保
调用,否则文件句柄泄漏
编码需在构造时传入,比如
中第二个
表示追加
示例:
追加写入时容易踩的坑
不是所有“写文件”操作都等价,几个关键点常被忽略:
会清空重写,不是追加 —— 新手误用导致数据全丢
多线程同时追加同一文件,
不保证线程安全,可能乱序或截断
用
时若忘了传
(append 参数),就变成覆盖写入
Windows 下换行用
,但
自动处理;手动拼接字符串时别漏掉
路径含中文或空格一般没问题,但若权限不足(如写系统目录),会抛
真正麻烦的不是“怎么追加”,而是“什么时候该追加、要不要加锁、要不要缓冲、要不要检查磁盘空间”——这些得看具体业务场景,不能光靠一个函数名解决。
File.AppendAllText()StreamWriterFileMode.AppendFile.AppendAllText()DirectoryNotFoundExceptionFile.AppendAllText("log.txt", $"[{DateTime.Now}] 用户登录成功\r\n");StreamWriterFileMode.AppendFileAccess.WriteusingDispose()new StreamWriter("data.log", true, Encoding.UTF8)trueusing (var writer = new StreamWriter("output.txt", true))
{
writer.WriteLine("新记录");
writer.WriteLine("另一条");
}File.WriteAllText()File.AppendAllText()StreamWritertrue\r\nWriteLine()UnauthorizedAccessException