我有一个非常简单的 C# 程序,它迭代多个文件并替换所有文件中的字符串。
但是,当我使用 Git 比较这些文件时,它突出显示了我所有文件的更改。
我的 C# 代码是:
string[] files = Directory.GetFiles(path, "*", SearchOption.AllDirectories);
foreach (string file in files)
{
string fileText = File.ReadAllText(fileName, Encoding.UTF8);
string newText = fileText.Replace("hello", "goodbye");
File.WriteAllText(fileName, newText, Encoding.UTF8);
}
就我而言,这看起来不错。
但是,当我运行这个程序并在存储库上执行 git status
时,我发现每个文件都有差异。
使用类似 Github Desktop 或 SourceTree 的程序会显示以下变化:
Github 桌面版
资源树
感谢您提供任何提示或想法。他们非常感激。 :)
最佳答案
这个字符是Unicode Byte Order Mark (BOM) 序言,由WriteAllText
方法自动添加。
如果你想写没有 BOM 的文件,你必须创建自定义编码:
Encoding utf8NoBom = new UTF8Encoding(false);
然后将实例作为 WriteAllLines
方法的第三个参数传递:
File.WriteAllText(fileName, fileText, utf8NoBom);
关于c# - File.WriteAllText 正在根据 Git 更改我的文件的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51444622/