我有一个非常简单的 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);
}
Run Code Online (Sandbox Code Playgroud)
就我而言,这看起来不错。但是,当我运行该程序并git status在存储库上执行时,我发现每个文件都有差异。
使用 Github Desktop 或 SourceTree 等程序会带来以下变化:
Github 桌面
源树
感谢您提供任何人可能有的提示或想法。他们非常感激。:)
该字符是Unicode 字节顺序标记(BOM) 前导码,由该WriteAllText方法自动添加。
如果你想写入没有BOM的文件,你必须创建自定义编码:
Encoding utf8NoBom = new UTF8Encoding(false);
Run Code Online (Sandbox Code Playgroud)
然后将该实例作为该WriteAllLines方法的第三个参数传递:
File.WriteAllText(fileName, fileText, utf8NoBom);
Run Code Online (Sandbox Code Playgroud)