我有一个正在读取网站响应的流。然后我将该流保存到文本文件中的文本。
如果我再次运行它并比较同一站点的字符串和文件中保存的文本,它认为它们是不同的。
当我比较像WinMerge这样的差异工具中的两个字符串时,它会在明显相同的点上找到差异。
发生了什么事?它们都使用默认的UTF8编码器。
我很欣赏这可能很难遵循,所以我为你写了一个工作实例。
以下是一个例子:
var request = WebRequest.Create("http://www.google.com");
using (var response = request.GetResponse())
using (var body = response.GetResponseStream())
using (var googReader = new StreamReader(body))
using (var googFileStream = File.Open("goog.txt", FileMode.OpenOrCreate))
using (var fileReader = new StreamReader(googFileStream))
{
var googText = googReader.ReadToEnd();
var fileText = fileReader.ReadToEnd();
if (!string.Equals(googText, fileText))
{
googFileStream.Dispose();
using (var msnWriter = new StreamWriter(File.Open("goog.txt", FileMode.Create)))
{
msnWriter.Write(googText);
}
}
}
这是WinMerge报告的明显“差异”。它显然是在html之间;字符集:
答案 0 :(得分:4)
您的代码似乎很好。只是Google
每次向它发送请求时实际返回不同的内容。除此之外,您可以尝试简化代码并使用每次都不会返回不同内容的网站:
var file = "goog.txt";
using (var client = new WebClient())
{
var data = client.DownloadString("http://www.google.com");
if (!File.Exists(file) || !string.Equals(File.ReadAllText(file), data))
{
File.WriteAllText(file, data);
}
}