Wie gesagt, das
langsame byteweise Lesen.
- Lesen über einen Puffer
- und der Einfachheit halber die Zählrichtung vom Counter umgedreht
Bedenke auch, daß bei TMemoryStream alles im
RAM landet, welches bei größeren Dateien Probleme bereiten kann.
[add] Aber wenn eh schon alles im
RAM liegt, dann kann man natürlich alles auf einmal vergleichen ... siehe nachfolgend Neutral General.
Delphi-Quellcode:
function ByteCompFiles(
const aSourceFile, aDestFile:
string): Boolean;
var
SourceFile, DestFile: TFileStream;
Counter: Int64;
BufSize: Integer;
SourceBuffer, DestBuffer:
array[0..32767]
of Byte;
begin
SourceFile := TFileStream.Create(aSourceFile, fmOpenRead
or fmShareDenyWrite);
try
DestFile := TFileStream.Create(aDestFile, fmOpenRead
or fmShareDenyWrite);
try
Result := SourceFile.Size = DestFile.Size;
Counter := SourceFile.Size;
while Result
and (Counter > 0)
do
begin
if Counter >= SizeOf(SourceBuffer)
then
BufSize := SizeOf(SourceBuffer)
else
BufSize := Counter;
SourceFile.ReadBuffer(SourceBuffer, BufSize);
DestFile.ReadBuffer(DestBuffer, BufSize);
Result := CompareMem(@SourceBuffer, @DestBuffer, BufSize);
Dec(Counter, BufSize);
end;
finally
DestFile.Free;
end;
finally
SourceFile.Free;
end;
end;