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.ReadAllText
和File.WriteAllText
(从FileInfo
获取路径)。 那样:
- 它将完全替换文件,而不是仅覆盖
- 您无需担心正确关闭读取器/写入器/流(您现在没有这样做 – 如果发生exception,您将使读取器或写入器保持打开状态)
如果您确实想使用FileInfo方法,请使用FileInfo.Open(FileMode.Create)
来截断文件。