我编写了一个简单的实用程序,它遍历项目中的所有C#文件,并更新顶部的版权文本。
例如,文件可能如下所示;
//Copyright My Company, © 2009-2010
程序应该将文本更新为这样;
//Copyright My Company, © 2009-2010
然而,我写的代码导致了这一点;
//Copyright My Company, � 2009-2011
这是我正在使用的代码;
public bool ModifyFile(string filePath, List<string> targetText, string replacementText)
{
if (!File.Exists(filePath)) return false;
if (targetText == null || targetText.Count == 0) return false;
if (string.IsNullOrEmpty(replacementText)) return false;
string modifiedFileContent = string.Empty;
bool hasContentChanged = false;
//Read in the file content
using (StreamReader reader = File.OpenText(filePath))
{
string file = reader.ReadToEnd();
//Replace any target text with the replacement text
foreach (string text in targetText)
modifiedFileContent = file.Replace(text, replacementText);
if (!file.Equals(modifiedFileContent))
hasContentChanged = true;
}
//If we haven't modified the file, dont bother saving it
if (!hasContentChanged) return false;
//Write the modifications back to the file
using (StreamWriter writer = new StreamWriter(filePath))
{
writer.Write(modifiedFileContent);
}
return true;
}
任何帮助/建议表示赞赏。谢谢!
答案 0 :(得分:2)
这是一个令人头疼的问题。
我认为你应该改变这一行
using (StreamWriter writer = new StreamWriter(filePath))
使用正确的编码保存的变体(看起来像这样的重载)
using (StreamWriter writer = new StreamWriter(filePath, false, myEncoding))
要获得正确的编码,请在打开文件的位置添加此行
myEncoding = reader.CurrentEncoding;
答案 1 :(得分:1)
尝试使用
StreamWriter(string path, bool append, Encoding encoding)
即
new StreamWriter(filePath, false, new UTF8Encoding())
答案 2 :(得分:1)
从阅读器获取编码并在编写器中使用它。
更改了代码:
public bool ModifyFile(string filePath, List targetText, string replacementText)
{
if (!File.Exists(filePath)) return false;
if (targetText == null || targetText.Count == 0) return false;
if (string.IsNullOrEmpty(replacementText)) return false;
string modifiedFileContent = string.Empty;
bool hasContentChanged = false;
Encoding sourceEndocing = null;
using (StreamReader reader = File.OpenText(filePath))
{
sourceEndocing = reader.CurrentEncoding;
string file = reader.ReadToEnd();
foreach (string text in targetText)
modifiedFileContent = file.Replace(text, replacementText);
if (!file.Equals(modifiedFileContent))
hasContentChanged = true;
}
if (!hasContentChanged) return false;
using (StreamWriter writer = new StreamWriter(filePath, false, sourceEndocing))
{
writer.Write(modifiedFileContent);
}
return true;
}
答案 3 :(得分:-1)
答案 4 :(得分:-1)
我敢打赌它与文件内容的编码有关。确保使用正确的编码实例化StreamWriter。 (http://msdn.microsoft.com/en-us/library/f5f5x7kt.aspx)