MD5 比较无效
MD5 Comparison not working
我尝试创建一个简单的小应用程序,以便更轻松地为我的主项目创建更新文件,只需比较两个或多或少相似的文件夹中的文件并告诉我哪些文件不同。但在测试两个完全相似的文件夹时,它总是给我以下输出:
C:\Users\there\Desktop\Folder 2.txt
C:\Users\there\Desktop\Folder 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");
}
}
}
}
}
我想我现在只是愚蠢并监督了一些愚蠢的错误,但如果有人能提供帮助,我将不胜感激。
谢谢,简
你的字节比较错误
storedFileHash != md5.ComputeHash(stream)
这将比较引用而不是字节。
使用SequenceEqual
:
if (storedFileHash.SequenceEqual(md5.ComputeHash(stream)) == false) {
ResultTB.AppendText(file.Replace(FirstFolderTB.Text, SecondFolderTB.Text) + "\n");
}
如果缺少,请在使用部分添加 using System.Linq
我尝试创建一个简单的小应用程序,以便更轻松地为我的主项目创建更新文件,只需比较两个或多或少相似的文件夹中的文件并告诉我哪些文件不同。但在测试两个完全相似的文件夹时,它总是给我以下输出:
C:\Users\there\Desktop\Folder 2.txt
C:\Users\there\Desktop\Folder 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");
}
}
}
}
}
我想我现在只是愚蠢并监督了一些愚蠢的错误,但如果有人能提供帮助,我将不胜感激。
谢谢,简
你的字节比较错误
storedFileHash != md5.ComputeHash(stream)
这将比较引用而不是字节。
使用SequenceEqual
:
if (storedFileHash.SequenceEqual(md5.ComputeHash(stream)) == false) {
ResultTB.AppendText(file.Replace(FirstFolderTB.Text, SecondFolderTB.Text) + "\n");
}
如果缺少,请在使用部分添加 using System.Linq