Thema: Delphi Streams vergleichen

Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

Streams vergleichen

  Alt 12. Okt 2005, 09:58
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;
Andreas
  Mit Zitat antworten Zitat