Войти

Показать полную графическую версию : Вычисление md5 хеш суммы файла с прогресс баром.


DoroViska
06-08-2014, 20:17
Задача вычислять md5 хеш сумму файла и отображать ход вычисления в прогресс баре.
метод уже готов осталось только как-то отобразить ход в прогресс баре.

private string ComputeMD5Checksum(string path)
{
using (FileStream fs = System.IO.File.OpenRead(path))
{
MD5 md5 = new MD5CryptoServiceProvider();

byte[] fileData = new byte[fs.Length];
fs.Read(fileData, 0, (int)fs.Length);
byte[] checkSum = md5.ComputeHash(fileData);
string result = BitConverter.ToString(checkSum).Replace("-", String.Empty);
return result;
}
}

Iska
06-08-2014, 20:37
осталось только как-то отобразить ход в прогресс баре.»
В приведённом коде нечего отображать в «прогресс баре». Разве что 0% до и 100% после.

DoroViska
06-08-2014, 21:12
Iska, Ага нах нечего. 27 гб вычисляется минут 5 на галимом пк. висячая надпись подождите идёт вычисление md5 для нубка говорит о том что надо закрыть приложение буд-то оно зависло.

Iska
06-08-2014, 22:33
DoroViska, обсценная лексика на конференции не приветствуется.

Как Вы предлагаете «влезть» внутрь метода «.ComputeHash()»?

DoroViska
07-08-2014, 17:07
Iska, Вот тут то и дело что никак. а есть другие методы или либа ? может чё есть?

Iska
08-08-2014, 02:44
а есть другие методы »
Смотрите, пробуйте: md5 with progressbar - Поиск в Google (https://www.google.ru/search?q=md5+with+progressbar), может, найдёте подходящее по Вашим потребностям.

Вам, собственно, зачем сам хэш, под какие цели?

DoroViska
08-08-2014, 08:40
Да лаунчер для обновления игры.

Iska
08-08-2014, 09:16
Нужен более конкретный ответ. Как результат исчисления MD5 там используется?

DoroViska
08-08-2014, 09:29
Iska, Для проверки файлов игры. кеш запрашиваться с сервера и лаучнер должен проверить игру.

Iska
08-08-2014, 09:59
И 27 Gb у одного из файлов? Что ж это за игра-то.

Используйте менее трудоёмкие варианты, например, CRC32. Читайте и вычисляйте кусками, например, по 8-16 Мб (и тут-то делайте прогресс-бар), складывайте полученные хэши кусков в строку, затем хэшируйте саму эту строку. Вариантов много.

Вы ранее приведённую ссылку на поиск смотрели, пробовали подбирать что-нибудь?

User001
08-08-2014, 13:06
27 гб вычисляется минут 5 на галимом пк »
Вы свою программу без прогресс-бара проверяли?

Поясните вот этот кусок:
byte[] fileData = new byte[fs.Length];
fs.Read(fileData, 0, (int)fs.Length); »
Насколько я понимаю, вы создаете массив размером = длина файла, а потом копируете весь файл в память. У вас 27 Гб ОЗУ? Начните с чтения учебника по .NET, к примеру...
Читайте и вычисляйте кусками, например, по 8-16 Мб (и тут-то делайте прогресс-бар), складывайте полученные хэши кусков в строку, затем хэшируйте саму эту строку. »Да, часто бывает метод типа Update(byte []), которому можно по кускам скармливать...

Iska
08-08-2014, 13:29
Да, часто бывает метод типа Update(byte []), которому можно по кускам скармливать... »
Нет, тут я как раз напрямую говорю — мы не считаем хэш всего файла. Мы считаем хэши мелких кусков, склеиваем их в одну переменную (хоть массивом байт, хоть строкой) и ещё раз считаем хэш, теперь уже этого полученного набора. В авторском случае неважно считать хэш на весь файл или таким вот макаром. Хотя для самой задачи обновления давно есть решение — MSI.

Delirium
29-08-2014, 07:06
висячая надпись подождите идёт вычисление md5 для нубка говорит о том что надо закрыть приложение буд-то оно зависло »
Ну раз уж нет возможности читать по кускам, добавьте вы надпись: Старт в <время>, покажите Прогресс бар, который не по квадратикам заполняется, а постоянно (свойство контрола). И добавьте текст - примерное время обновления - 5 минут. И в отдельном потоке таймер выполнения.
Когда человек видит, что на форме что то "тикает", это указывает ему на то, что приложение не зависло...

Iska
29-08-2014, 07:50
Delirium, в этом случае не прогресс-бар нужен, а, скорее, что-то наподобие такого:
http://i.imgur.com/eQZOSXL.gif

User001
29-08-2014, 10:57
в этом случае не прогресс-бар нужен, а, скорее, что-то наподобие такого »Не люблю когда такие элементы на прогресс бар похожими делают (квадратики циклически бегают).

Iska
29-08-2014, 17:00
Так я и говорю, что не в виде полосы, а в виде круга.

Предложение же коллеги Delirium имеет право на жизнь в том случае, если время вычисления хэша объёма всего файла пропорционально коррелирует со временем вычисления хэша небольшой части, взятой для оценки. Т.е., к примеру, если соблюдается примерное соотношение (время вычисления MD5 для 1Gb / 2¹⁰) ≈ время вычисления MD5 для 1Mb. Так оно или нет — я не знаю, не проверял.




© OSzone.net 2001-2012