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

有人知道为什么它没有按预期工作吗?

StreamReader sr = fi.OpenText;
String fileContents = sr.ReadToEnd();
sr.close();
fileContents = fileContents.Replace("<body>", "<body onload='jsFx();' />");
fileContents = fileContents.Replace("</body>","blah blah blah </body>");

StreamWriter sw = new StreamWriter(fi.OpenWrite());
sw.WriteLine(contents);
sw.close();

最佳答案

我可能会像这样重写您的一些代码:

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

fileContents = fileContents.Replace("<body>", "<body onload='jsFx();' />");
fileContents = fileContents.Replace("</body>","blah blah blah </body>");

System.IO.File.WriteAllText(@"C:\File.html", fileContents);

我应该注意,此解决方案适用于合理大小的文件。取决于硬件,任何东西都只有几十MB。它将全部内容加载到内存中。如果您有一个非常大的文件,则可能需要一次将其流式传输数百KB,以防止OutOfMemoryException。这使事情变得更加复杂,因为您还需要检查每个块之间的中断,以查看是否拆分了搜索字符串。

10-08 05:11