MD5比较不起作用

时间:2017-02-02 20:06:09

标签: c# .net compare md5

我尝试创建一个简单的小应用程序,通过比较两个或多或少相似的文件夹中的文件并告诉我哪些文件不同,更容易为我的主项目创建更新文件。但是在测试两个完全相似的文件夹时,它总是给我以下输出:

  

C:\ Users \ there \ Desktop \ Folder 2 \ 1.txt

     

C:\ Users \ there \ Desktop \ Folder 2 \ 2.txt

我的代码:

    private void FirstFolderBtn_Click(object sender, EventArgs e)
    {
        using (var fbd = new FolderBrowserDialog())
        {
            DialogResult result = fbd.ShowDialog();

            if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath))
            {
                FirstFolderTB.Text = fbd.SelectedPath;
            }
        }
    }

    private void SecondFolderButton_Click(object sender, EventArgs e)
    {
        using (var fbd = new FolderBrowserDialog())
        {
            DialogResult result = fbd.ShowDialog();

            if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath))
            {
                SecondFolderTB.Text = fbd.SelectedPath;
            }
        }
    }

    private void CompareBtn_Click(object sender, EventArgs e)
    {
        foreach(string file in Directory.GetFiles(FirstFolderTB.Text))
        {
            byte[] storedFileHash;
            using (var md5 = MD5.Create())
            {
                using (var stream = File.OpenRead(file))
                {
                    storedFileHash = md5.ComputeHash(stream);
                }

                using (var stream = File.OpenRead(file.Replace(FirstFolderTB.Text, SecondFolderTB.Text)))
                {
                    if(storedFileHash != md5.ComputeHash(stream))
                    {
                        ResultTB.AppendText(file.Replace(FirstFolderTB.Text, SecondFolderTB.Text) + "\n");
                    }
                }
            }
        }
    }

我认为我现在只是愚蠢并且监督一些愚蠢的错误,但如果有人可以提供帮助我会很感激。

谢谢,Jan

1 个答案:

答案 0 :(得分:0)

您的字节比较错误

  

storedFileHash != md5.ComputeHash(stream)

这将比较引用而不是字节。

使用SequenceEqual

if (storedFileHash.SequenceEqual(md5.ComputeHash(stream)) == false) {
    ResultTB.AppendText(file.Replace(FirstFolderTB.Text, SecondFolderTB.Text) + "\n");
}

如果在使用部分

中缺少添加using System.Linq