比较来自两个不同流的两个字符串永远不会相等,即使它们应该是

Bri*_*per 3 c# webrequest stream

我有一个正在读取站点响应的流。然后我将该流保存为文本文件中的文本。

如果我再次运行它并比较来自同一站点的字符串和保存在文件中的文本,它认为它们是不同的。

当我在像 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);
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

这是 WinMerge 报告的明显“差异”。它显然在 html 之间;字符集: 两个字符串的差异

Dar*_*rov 5

你的代码看起来不错。只是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);
    }
}
Run Code Online (Sandbox Code Playgroud)