C# - 如何同时为多个文件哈希MD5?

时间:2015-06-17 19:45:49

标签: c# md5 antivirus

我正在尝试创建一个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();
    }

2 个答案:

答案 0 :(得分:0)

尽可能多地调用此方法...... 如果您询问是否在同一文件夹中散列所有文件 - 首先获取它们并在其上运行

Directory.GetFiles(dirPath)

答案 1 :(得分:0)

如果您尝试同时散列多个文件(通过线程),您应该查看System.Threading.Tasks命名空间,这是.NET Framework中任务并行库的一部分 - 特别是{{1} }。

Microsoft提供了一个很好的示例,说明如何通过MSDN提供的How to: Write a Simple Parallel.ForEach Loop同时处理多个文件。您可以创建一个事件处理程序,以便在每次完成时传递MD5哈希计算的结果。