Folgende Funktion vergleicht zwei Streams und liefert TRUE bei Gleichheit und FALSE bei Unterschieden.
Die Daten werden in Blöcken à 8 kb gelesen und im Speicher verglichen.
Delphi-Quellcode:
{**************************************************************************
* NAME: CompareStreams
* DESC: Vergleicht den Inhalt 2er Streams
* PARAMS: [-]
* RESULT: True => Inhalt gleich, False => Inhalt verschieden
* CREATED: 08-11-2004/shmia
*************************************************************************}
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;