C# - 如何同时对多个文件进行哈希处理 MD5
本文关键字:哈希 处理 MD5 文件 何同时 | 更新日期: 2023-09-27 17:56:53
我正在尝试制作一个 MD5 哈希器,在在线教程的帮助下,我设法制作了一些有用的东西。但是,我不知道如何使代码适用于多个文件。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string filePath = e.Argument.ToString();
byte[] buffer;
int bytesRead;
long size;
long totalBytesRead = 0;
using (Stream file = File.OpenRead(filePath))
{
size = file.Length;
using (HashAlgorithm hasher = MD5.Create())
{
do
{
buffer = new byte[4096];
bytesRead = file.Read(buffer, 0, buffer.Length);
totalBytesRead += bytesRead;
hasher.TransformBlock(buffer, 0, bytesRead, null, 0);
backgroundWorker1.ReportProgress((int)((double)totalBytesRead / size * 100));
}
while (bytesRead != 0);
hasher.TransformFinalBlock(buffer, 0, 0);
e.Result = MakeHashString(hasher.Hash);
}
}
}
private static string MakeHashString(byte[] hashBytes)
{
StringBuilder hash = new StringBuilder(32);
foreach (byte b in hashBytes)
hash.Append(b.ToString("X2").ToLower());
return hash.ToString();
}
根据需要
调用此方法...如果您询问如何对同一文件夹中的所有文件进行哈希处理 - 首先获取它们并运行所有文件
Directory.GetFiles(dirPath)
如果您尝试同时(通过线程)对多个文件进行哈希处理,则应查看 System.Threading.Tasks
命名空间,这是 .NET Framework 中任务并行库的一部分 - 特别是 Parallel.ForEach
.
Microsoft提供了一个很好的示例,说明如何通过 MSDN 提供的如何:编写简单的 Parallel.ForEach 循环并发处理多个文件。 您可以创建一个事件处理程序,以便在每个处理程序完成时传递 MD5 哈希计算的结果。