现有代码正在调用File.AppendAllText(filename, text)
重载以将文本保存到文件中。
我需要能够在不破坏向后兼容性的情况下指定编码。如果我要使用File.AppendAllText(filename, text, encoding)
重载,我需要指定哪种编码来确保以完全相同的方式创建文件?
AppendAllText()的两个参数重载最终File.InternalAppendAllText()
使用没有 BOM 的 UTF-8 编码调用内部方法:
[SecuritySafeCritical]
public static void AppendAllText(string path, string contents)
{
if (path == null) {
throw new ArgumentNullException("path");
}
if (path.Length == 0) {
throw new ArgumentException(
Environment.GetResourceString("Argument_EmptyPath"));
}
File.InternalAppendAllText(path, contents, StreamWriter.UTF8NoBOM);
}
因此,您可以编写:
using System.IO;
using System.Text;
File.AppendAllText(filename, text, new UTF8Encoding(false, true));
快速浏览一下 File.AppenAllText 的源代码会发现以下实现:
public static void AppendAllText(string path, string contents)
{
// Removed some checks
File.InternalAppendAllText(path, contents, StreamWriter.UTF8NoBOM);
}
internal static Encoding UTF8NoBOM
{
get
{
if (StreamWriter._UTF8NoBOM == null)
{
StreamWriter._UTF8NoBOM = new UTF8Encoding(false, true);
}
return StreamWriter._UTF8NoBOM;
}
}
所以看起来你想传递一个没有 UTF8 标头字节的 UTF8Encoding 实例。