Главная страница
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.019 c
1-71200
SAVwa
2002-08-09 21:23
2002.08.22
Как заставить локалный Variant не освобождаться?


3-70998
nikolo
2002-07-31 13:19
2002.08.22
Как через ADO коннектиться к DBF и Paradox?


14-71343
melifaro
2002-07-26 19:52
2002.08.22
Чего-чего там на землю летит?


3-71017
RangerBetta
2002-07-31 08:17
2002.08.22
Подскажите SQL WHere


3-70994
S@shka
2002-07-31 12:53
2002.08.22
Чем отличается Commit от CommitRetaining