Zitat:
Deine Lösung mag zwar schneller sein, aber selbst mit der simplen eingebauten Prozedur MD5File aus md5.pas Lösung mit max. 64 KB Buffer hat man keine wesentlichen Geschwindingkeitseinbußen:
Hier muss ich nur fragen, wie man MD5File verwendet? Es gibt ja keinen Rückgabewert.
Delphi-Quellcode:
procedure MD5File(const fname: Str255; var Digest: TMD5Digest; var buf; bsize: word; var Err: word);
{-MD5 of file, buf: buffer with at least bsize bytes}
Und als Kommentar in Hash.HashFile: {-Calculate hash digest of file, buf: buffer with at least bsize bytes}
Das Ergebnis Digest ist ein
Var-Parameter! Außerdem hast Du noch einen Error-Code Err, falls ein Fehler auftritt.
Was willst Du mehr?
Edit: Hier das ganze als Komplett-Programm (diesmal mit 32KB-Puffer)
Delphi-Quellcode:
{$Apptype console}
uses
hash, md5, mem_util;
const
BSIZE = $8000;
var
buf: array[0..BSIZE-1] of byte;
Digest: TMD5Digest;
Err: word;
begin
if paramcount>0 then begin
MD5File(paramstr(1),Digest, buf, sizeof(buf), Err);
if Err<>0 then writeln('Error ', Err)
else writeln('MD5 = ', HexStr(@Digest, sizeof(Digest)));
end
else writeln('Usage: MD5F <file>');
end.
und noch mal das 512MB-Testfile
Code:
D:\Work\CRC_HASH>timethis md5f.exe 512MB_A
TimeThis : Command Line : md5f.exe 512MB_A
TimeThis : Start Time : Wed Nov 29 10:15:22 2017
MD5 = 31e4d9c6d74cd592b78f77f72965d6ab
TimeThis : Command Line : md5f.exe 512MB_A
TimeThis : Start Time : Wed Nov 29 10:15:22 2017
TimeThis : End Time : Wed Nov 29 10:15:24 2017
TimeThis : Elapsed Time : 00:00:02.610