Checksummen wie z.B. MD5 lohnen ja nur dann, wenn die Checksumme einmal erstellt wird und dann mehrmals verwendet wird.
Oder eine weitere Anwendung wär, dass man nur die Checksumme herunterlädt und dann mit der Checksumme der lokalen Datei überprüft.
Damit vermeidet man das Herunterladen der Datei, die sehr gross sein kann.
In deinem Fall vermute ich aber, dass du jedes Mal die Checksummen beider Dateien berechnest.
Dann kannst du aber auch gleich die Dateien direkt vergleichen:
Delphi-Quellcode:
function CompareStreams(const A, B : TStream): Boolean;
const
BUFSIZE = 8192;
var
bufA, bufB : string;
r : Integer;
begin
if A.Size <> B.Size then
Result := False
else
begin
A.Position := 0;
B.Position := 0;
SetLength(bufA, BUFSIZE);
SetLength(bufB, BUFSIZE);
while A.Position < A.Size do
begin
r := A.Size - A.Position;
// da die Properties [TStream].Size & .Position ab Delphi 6
// als Int64 deklariert sind, könnte ein Überlauf im Integer "r" auftreten.
// dies wird berücksichtigt durch "r<=0"
if (r > BUFSIZE) or (r<=0) then
r := BUFSIZE;
A.ReadBuffer(bufA[1], r);
B.ReadBuffer(bufB[1], r);
if not CompareMem(PChar(bufA), PChar(bufB), r) then
begin
Result := False;
Exit;
end;
end;
Result := True;
end;
end;
function CompareFiles(const file1, file2:string):Boolean;
var
a, b : TStream;
begin
a := TFileStream.Create(file1, fmOpenRead or fmShareDenyWrite);
try
b := TFileStream.Create(file2, fmOpenRead or fmShareDenyWrite);
try
Result := CompareStreams(a, b);
finally
b.Free;
end;
finally
a.Free;
end;
end;