Как хэшировать MD5 для более чем одного файла одновременно?

Я пытаюсь создать 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 ответа

Вызывайте этот метод столько раз, сколько вам нужно... Если вы спрашиваете о хэшировании всех файлов в одной папке - сначала получите их и запустите их все

Directory.GetFiles(dirPath)

Если вы пытаетесь хэшировать несколько файлов одновременно (через потоки), вам следует взглянуть на System.Threading.Tasks namespace, часть дополнения Task Parallel Library к.NET Framework - особенно Parallel.ForEach,

Microsoft предоставляет хороший пример того, как работать с несколькими файлами одновременно с помощью Практического руководства : Написать простой цикл Parallel.ForEach, доступный через MSDN. Вы можете создать обработчик событий для передачи результатов вычисления хеша MD5 по завершении каждого из них.

Другие вопросы по тегам