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();
    }

C# - 如何同时对多个文件进行哈希处理 MD5

根据需要

调用此方法...如果您询问如何对同一文件夹中的所有文件进行哈希处理 - 首先获取它们并运行所有文件

Directory.GetFiles(dirPath)

如果您尝试同时(通过线程)对多个文件进行哈希处理,则应查看 System.Threading.Tasks 命名空间,这是 .NET Framework 中任务并行库的一部分 - 特别是 Parallel.ForEach .

Microsoft提供了一个很好的示例,说明如何通过 MSDN 提供的如何:编写简单的 Parallel.ForEach 循环并发处理多个文件。 您可以创建一个事件处理程序,以便在每个处理程序完成时传递 MD5 哈希计算的结果。