Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.22;
Скачать: CL | DM;

Вниз

TFileStream   Найти похожие ветки 

 
Вечно молодой ©   (2002-08-11 22:05) [0]

Здравствуйте!
Пишу функцию для сравнения двух файлов (по их содержанию). Она должна возвращать True, если файлы одинаковые, и False, если они неодинаковые или возникла ошибка. Сейчас она выглядит так:

function IsDuplicates (FileName1, FileName2 : String) : Boolean;
const
BufferSize = 16384;
var
i : LongInt;
BytesCount1 : Integer;
BytesCount2 : Integer;
FileStream1 : TFileStream;
FileStream2 : TFileStream;
Buffer1 : PByteArray;
Buffer2 : PByteArray;
begin
Result := True;
try { Пытаемся создать первый поток }
FileStream1 := TFileStream.Create (FileName1, fmShareDenyNone);
except { Не удалось создать первый поток }
Result := False;
Exit;
end;
try { Пытаемся создать второй поток }
FileStream2 := TFileStream.Create (FileName2, fmShareDenyNone);
except { Не удалось создать второй поток}
Result := False;
FileStream1.Free;
Exit;
end;
GetMem (Buffer1, BufferSize);
GetMem (Buffer2, BufferSize);
try
if FileStream1.Size <> FileStream2.Size then
Result := False { Потоки не совпадают, поскольку имеют разные размеры }
else

while (FileStream1.Size > FileStream1.Position) and Result do
begin
BytesCount1 := FileStream1.Read (Buffer1^, BufferSize);
BytesCount2 := FileStream2.Read (Buffer2^, BufferSize);
if (BytesCount1 = BytesCount2) then
begin
for i := 0 to BytesCount1 - 1 do
if Buffer1^ [i] <> Buffer2^ [i] then { Байты не совпали }
begin
Result := False;
Break;
end;
end
else
begin { BytesCount1 <> BytesCount2 }
Result := False;
Break;
end;
end; // While
except
Result := False;
end;
{ Уничтожаем потоки, освобождаем память }
FileStream1.Free;
FileStream2.Free;
FreeMem (Buffer1, BufferSize);
FreeMem (Buffer2, BufferSize);
end;


Вопрос такой : в выделенной строке оставить всё как есть или поменять знак ">" на ">="?


 
TTCustomDelphiMaster ©   (2002-08-11 22:45) [1]

F1 - CompareMem
Полезная функция.


 
Вечно молодой ©   (2002-08-12 10:07) [2]

> TTCustomDelphiMaster

Всё гениальное просто. Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2002.08.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.014 c
3-71026
NDR
2002-07-31 12:10
2002.08.22
Как проиндексировать базу


3-70954
Ruslan_55
2002-08-01 14:02
2002.08.22
Снова о добавлении записей из внешней таблицы...


3-70972
nick_sniper
2002-08-01 15:56
2002.08.22
Синхронизация нескольких удаленных БД


6-71276
Big Lamer
2002-06-09 00:34
2002.08.22
Как организовать прием-посылку Popup-сообщений ?


14-71308
Lamer86
2002-07-24 21:41
2002.08.22
Народ, зацените мой сайт