![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сравнение 2-х TFileStream
Unknown1 © (2012-11-16 11:16:00)Как быстро сравнить?
Unknown1 (2012-11-16 11:34:00) [81]
> сравнить размеры, при совпадении прочитать данные поблочно
> да сравнить, а как ещё-то? потоки ничего больше не умеют,
> только читать и писать.
Так вот:
function FilesAreEqual(const FileName1, FileName2: string): Boolean;
const
BLOCK_SIZE = 65536;
var
Buf1, Buf2: array[1..BLOCK_SIZE] of Byte;
FS1, FS2: TFileStream;
Len1, Len2: Integer;
begin
Result := False;
FS1 := TFileStream.Create(FileName1, fmOpenRead or fmShareDenyNone);
try
FS2 := TFileStream.Create(FileName2, fmOpenRead or fmShareDenyNone);
try
if FS1.Size <> FS2.Size then
Exit;
Len1 := FS1.Read(Buf1[1], BLOCK_SIZE);
Len2 := FS2.Read(Buf2[1], BLOCK_SIZE);
if Len1 <> Len2 then
Exit;
if not CompareMem(@Buf1[1], @Buf2[1], Len1) then
Exit;
Result := True;
finally
FS2.Free;
end;
finally
FS1.Free;
end;
end;
RWolf (2012-11-16 11:21:00) [82]сравнить размеры, при совпадении прочитать данные поблочно да сравнить, а как ещё-то? потоки ничего больше не умеют, только читать и писать.