Вопрос

Я использую следующий код для вычисления MD5SUM файла:

byte[] b = System.IO.File.ReadAllBytes(file);
string sum = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(b));

Обычно это работает нормально, но если я столкнусь с большим файлом (~ 1 ГБ), например.ISO-образ или файл DVD VOB — я получаю исключение «Недостаточно памяти».

Тем не менее, я могу вычислить MD5SUM в cygwin для того же файла примерно за 10 секунд.

Подскажите, пожалуйста, как мне заставить это работать с большими файлами в моей программе.

Спасибо

Это было полезно?

Решение

Предлагаю использовать альтернативный метод:

MD5CryptoServiceProvider.ComputeHash(Stream)

и просто передайте входной поток, открытый в вашем файле.Этот метод почти наверняка нет прочитать весь файл в памяти за один раз.

Еще хотелось бы отметить, что в большинстве реализаций MD5 можно добавить byte[] данные в функцию дайджеста по частям, а затем запросить хеш в конце.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top