Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для ErikPshat

Пользователь


Сообщения: 54
Благодарности: 11

Профиль | Отправить PM | Цитировать


usermode, окей, теперь работает. Но так не честно. Чтобы быть объективным, тогда уж надо подсчитать время и потом сравнивать посекундно, какая функция ведёт подсчёт быстрее. Вот так я подсчитал время перед стартом подсчёта контрольной суммы и после, заодно можно сравить по времени подсчёт MD5 и SHA-1 того же файла:
Скрипт
Код: Выделить весь код
;InnoSetupVersion=5.6.1 (Unicode)
#define CP = (Defined UNICODE) ? "unicode" : "ansi"

[Setup]
AppName=test
AppVerName=test
OutputDir=...
OutputBaseFilename=HachCheck
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no

[Files]
Source: crc32c_{#CP}.dll; Flags: dontcopy;

[*Code*]
function GetCRC32COfFile(FilePath: String): Cardinal;
external 'GetCRC32COfFile@files:crc32c_{#CP}.dll stdcall';

procedure InitializeWizard;
var
  md5, sha1, t1, t2, t3, t4, t5, t6, f1, FileName: string;
  crc: cardinal;
begin
  if GetOpenFileName(ExpandConstant('Выберите файл'),FileName,ExpandConstant('{src}'),ExpandConstant('Выбрать любой файл ')+'(*.*)|*.*','*') then
    if MsgBox(ExpandConstant('Выбран файл')+#10#10+FileName+#10#10+ExpandConstant('Подсчитать контрольную сумму файла "'+ExtractFileName(FileName)+'" ?'), mbInformation, MB_YESNO) = IDYES then
  begin
  if FileExists(FileName) then
    begin
      t1:=GetDateTimeString('hh:nn:ss', '-', ':');
      crc:=GetCRC32COfFile(FileName);
      t2:=GetDateTimeString('hh:nn:ss', '-', ':');
      f1:=Format('%.8x',[crc]);
      MsgBox(ExpandConstant('Старт вычисления:   '+t1)+#10+#10+ExpandConstant('Хэш сумма CRC32:   '+f1)+#10#10+ExpandConstant('Конец вычисления:   '+t2), mbInformation, MB_OK);
    end;
    begin
      t3:=GetDateTimeString('hh:nn:ss', '-', ':');
      md5:=GetMD5OfFile(FileName);
      t4:=GetDateTimeString('hh:nn:ss', '-', ':');
      MsgBox(ExpandConstant('Старт вычисления:   '+t3)+#10+#10+ExpandConstant('Хэш сумма MD5:   '+md5)+#10#10+ExpandConstant('Конец вычисления:   '+t4), mbInformation, MB_OK);
    end;
    begin
      t5:=GetDateTimeString('hh:nn:ss', '-', ':');
      sha1:=GetSHA1OfFile(FileName);
      t6:=GetDateTimeString('hh:nn:ss', '-', ':');
      MsgBox(ExpandConstant('Старт вычисления:   '+t5)+#10+#10+ExpandConstant('Хэш сумма SHA-1:   '+sha1)+#10#10+ExpandConstant('Конец вычисления:   '+t6), mbInformation, MB_OK);
    end;
    MsgBox(ExpandConstant('CRC32 :'+#10#10+'Старт вычисления:   '+t1)+#10+#10+ExpandConstant('Конец вычисления:   '+t2)+#10+#10+#10+
           ExpandConstant('MD5   :'+#10#10+'Старт вычисления:   '+t3)+#10+#10+ExpandConstant('Конец вычисления:   '+t4)+#10+#10+#10+
           ExpandConstant('SHA-1 :'+#10#10+'Старт вычисления:   '+t5)+#10+#10+ExpandConstant('Конец вычисления:   '+t6), mbInformation, MB_OK);
  end;
end;

Лучше видно будет на больших файлах, где-то 2-4 Гб, чем больше - тем очевиднее. Вот тогда можно и рассудить.
Вот пример вычисления чек-сумм файла 3,80 ГБ:

  • CRC32: 01 мин 32 сек
  • M D 5 : 00 мин 39 сек
  • SHA-1 : 01 мин 52 сек
MD5 у меня всегда почему-то быстрее всего подсчитывает.

Последний раз редактировалось ErikPshat, 29-04-2019 в 19:14.


Отправлено: 17:24, 29-04-2019 | #312