File.WriteAllText是一行写入文件的最简方法,自动处理编码(默认UTF-8无BOM)、创建文件并关闭流;不创建父目录,需预先调用Directory.CreateDirectory;大字符串慎用,避免内存溢出。
用 File.WriteAllText 一行搞定
最简单、最直接的方法就是调用 File.WriteAllText。它自动处理编码(默认 UTF-8 无 BOM)、创建文件、写入内容、关闭流,全程无需手动管理 StreamWriter 或 FileStream。
常见错误是误用 File.AppendAllText——它会在文件末尾追加,而不是覆盖写入;如果目标是“保存当前字符串为文件全部内容”,必须用 WriteAllText。
-
File.WriteAllText("path.txt", "hello world");—— 默认 UTF-8 编码(无 BOM) -
File.WriteAllText("path.txt", "你好", Encoding.UTF8);—— 显式指定 UTF-8(效果同上) -
File.WriteAllText("path.txt", "你好", Encoding.Default);—— 使用系统本地编码(如 GBK),跨平台易出乱码,不推荐
路径不存在时会自动创建目录吗?
不会。File.WriteAllText 只能创建文件,不能创建父目录。如果 "logs/error.txt" 中的 logs 文件夹不存在,会抛出 DirectoryNotFoundException。
安全写法是先确保目录存在:
Directory.CreateDirectory(Path.GetDirectoryName("logs/error.txt"));- 再调用
File.WriteAllText("logs/error.txt", content);
注意:Directory.CreateDirectory 对已存在的目录是安全的,不会报错或覆盖。
需要带 BOM 的 UTF-8 怎么办?
默认的 File.WriteAllText 输出的是 UTF-8 无 BOM。某些旧工具(如部分 Windows 记事本版本、PowerShell Get-Content)可能无法正确识别无 BOM 的 UTF-8,导致中文显示为乱码。