如果我可以請求一些幫助,我有一個問題,我想打開一個文件夾顯示每個文件及其散列,然後在顯示結束文件我想要散列來顯示總文件夾結構。下面的代碼不正確,因爲它將路徑MD5添加到文件MD5。MD5文件夾中的每個文件以及MD5文件夾
下面的代碼顯示了列表框中的每個文件,並在該下面顯示了一個散列,但散列代碼是爲每個文件重複使用的文件夾的散列。
private void btnFolder_Click(object sender, EventArgs e)
{
DialogResult result = folderBrowserDialog1.ShowDialog();
if (result == DialogResult.OK)
{
_path = folderBrowserDialog1.SelectedPath;
txtFolder.Text = _path;
// assuming you want to include nested folders
var files = Directory.GetFiles(_path, "*.*", SearchOption.TopDirectoryOnly)
.OrderBy(p => p).ToList();
foreach (string items in files)
{
MD5 md5 = MD5.Create();
for (int i = 0; i < files.Count; i++)
{
string file = files[i];
// hash path
string relativePath = file.Substring(_path.Length + 1);
byte[] pathBytes = Encoding.UTF8.GetBytes(relativePath.ToLower());
md5.TransformBlock(pathBytes, 0, pathBytes.Length, pathBytes, 0);
// hash contents
byte[] contentBytes = File.ReadAllBytes(file);
if (i == files.Count - 1)
md5.TransformFinalBlock(contentBytes, 0, contentBytes.Length);
else
md5.TransformBlock(contentBytes, 0, contentBytes.Length, contentBytes, 0);
}
lstBox.Items.Add(items);
lstBox.Items.Add(BitConverter.ToString(md5.Hash).Replace("-", "").ToLower());
}
}
else
{
return;
}
}
在此先感謝您的幫助。
爲什麼你循環遍歷你的'files'數組兩次? (一次使用'foreach'並且再次使用'int i'。這就是爲什麼每次都得到一個總散列,因爲每次散列所有文件 –