Ich hab mir mal erlaubt, eine bessere Fehlerbehandlung einzubringen und die ganzen "break" und "exit" zu eliminieren. Ob das ständige Seek notwendig ist, lass ich mal dahingestellt. BTW: Wäre es nicht schneller, TMemoryStreams zu verwenden und das mit CompareMemory abzuhandeln?
Delphi-Quellcode:
function ByteCompFiles(const aSourceFile, aDestFile: string): Boolean;
var
SourceFile : TFileStream;
DestFile: TFileStream;
nCounter: Int64;
ReadByteSource: Byte;
ReadByteDest: Byte;
begin
try
Result := True;
nCounter := 0;
//Schreibzugriffe unterbinden, ansonsten wäre die ganze Aktion witzlos
SourceFile := TFileStream.Create(aSourceFile, fmOpenRead or fmShareDenyWrite);
try
DestFile := TFileStream.Create(aDestFile, fmOpenRead or fmShareDenyWrite);
try
//Dateigröße ist unterschiedlich -> Abbruch
Result := (SourceFile.Size = DestFile.Size);
while Result and (nCounter < SourceFile.Size) do
begin
SourceFile.Seek(nCounter, soFromBeginning);
SourceFile.Read(ReadByteSource, 1);
DestFile.Seek(nCounter, soFromBeginning);
DestFile.Read(ReadByteDest, 1);
//Unterschied gefunden -> Abbruch
Result := (ReadByteSource = ReadByteDest);
Inc(nCounter);
Sleep(10);
end;
finally
DestFile.Free;
end;
finally
SourceFile.Free;
end;
except
Result := False
end;
end;