Пользователь
Сообщения: 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 у меня всегда почему-то быстрее всего подсчитывает.
|