c#替换文件中的字符串

替换HTML文件内容的一部分时,String.Replace似乎无法正常工作。 例如,String.Replace用blah blah blah html>替换 blah blah blah html> – 注意第二个HTML结束标记未正确关闭,因此在页面呈现时显示用户的浏览器。

任何人都知道为什么它没有按预期工作?

 StreamReader sr = fi.OpenText; String fileContents = sr.ReadToEnd(); sr.close(); fileContents = fileContents.Replace("", ""); fileContents = fileContents.Replace("","blah blah blah "); StreamWriter sw = new StreamWriter(fi.OpenWrite()); sw.WriteLine(contents); sw.close(); 

我可能会像这样重写你的代码:

 var fileContents = System.IO.File.ReadAllText(@"C:\File.html"); fileContents = fileContents.Replace("", ""); fileContents = fileContents.Replace("","blah blah blah "); System.IO.File.WriteAllText(@"C:\File.html", fileContents); 

我应该注意,这个解决方案对于合理大小的文件很好。 根据硬件,任何低于几十MB的东西。 它将整个内容加载到内存中。 如果你有一个非常大的文件,你可能需要一次流几百KB来防止OutOfMemoryException。 这使得事情变得更复杂,因为您还需要检查每个块之间的中断以查看是否拆分了搜索字符串。

string.Replace在这里没有任何问题。

有什么问题是你要覆盖文件而不是截断文件…所以如果你把你的编写代码改为公正

 sw.WriteLine("Start"); 

你会看到“开始”,然后是文件的其余部分。

我建议您使用File.ReadAllTextFile.WriteAllText (从FileInfo获取路径)。 那样:

  • 它将完全替换文件,而不是仅覆盖
  • 您无需担心正确关闭读取器/写入器/流(您现在没有这样做 – 如果发生exception,您将使读取器或写入器保持打开状态)

如果您确实想使用FileInfo方法,请使用FileInfo.Open(FileMode.Create)来截断文件。