Delphi-Quellcode:
try
...
except
Result := False
end;
Dieses sollte besser ganz raus, denn bei einem Zugriffsfehler (z.B. fehlende Rechte) würde einfach nur FALSE ausgegeben, aber der Grund bleibt "geheim".
Außerdem könnte es ja dennoch sein, daß beide Dateien identisch sind, welches dann ntürlich ein falsches Ergebnis liefern würde.
die beiden kürzesten Quellcodes (nicht kürzeste Laufzeit) wären also:
Delphi-Quellcode:
function ByteCompFiles(const aSourceFile, aDestFile: string): Boolean;
var
SourceFile, DestFile: TFileStream;
Counter: Int64;
ByteSource, ByteDest: Byte;
begin
SourceFile := TFileStream.Create(aSourceFile, fmOpenRead or fmShareDenyWrite);
try
DestFile := TFileStream.Create(aDestFile, fmOpenRead or fmShareDenyWrite);
try
Result := SourceFile.Size = DestFile.Size;
Counter := 0;
while Result and (nCounter < SourceFile.Size) do
begin
SourceFile.ReadBuffer(ByteSource, 1);
DestFile.ReadBuffer(ByteDest, 1);
Result := ReadByteSource = ReadByteDest;
Inc(Counter);
end;
finally
DestFile.Free;
end;
finally
SourceFile.Free;
end;
end;
function ByteCompFiles(const aSourceFile, aDestFile: string): Boolean;
var
SourceFile, DestFile: TFileStream;
Counter: Int64;
ByteSource, ByteDest: Byte;
begin
SourceFile := TFileStream.Create(aSourceFile, fmOpenRead or fmShareDenyWrite);
DestFile := nil;
try
DestFile := TFileStream.Create(aDestFile, fmOpenRead or fmShareDenyWrite);
Result := SourceFile.Size = DestFile.Size;
Counter := 0;
while Result and (Counter < SourceFile.Size) do
begin
SourceFile.ReadBuffer(ByteSource, 1);
DestFile.ReadBuffer(ByteDest, 1);
Result := ReadByteSource = ReadByteDest;
Inc(Counter);
end;
finally
DestFile.Free;
SourceFile.Free;
end;
end;