![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сравнение файлов [D7]
nikfel © (2007-08-24 12:10:00)Подскажите пожалуйста. Вот функция для сравнения файлов, не знаю откуда взята, но у меня не работает.
function CompareFiles(Filename1,FileName2:string):longint;
{Сравнение файлов
возвращает номер несовпадающего байта,
(байты отсчитываются с 1)или:
0 - не найдено отличий,
-1 - ошибка файла 1
-2 - ошибка файла 2
-3 - другие ошибки}
const
Buf_Size=16384;
var
F1,F2:TFileStream;
i:longint;
Buff1,Buff2:PByteArray;
BytesRead1,BytesRead2:integer;
begin
Result:=0;
try
F1:=TFileStream.Create(FileName1,fmShareDenyNone);
except
Result:=-1;
exit;
end;
try
F2:=TFileStream.Create(FileName2,fmShareDenyNone);
except
Result:=-2;
F1.Free;
exit;
end;
GetMem(Buff1,Buf_Size);
GetMem(Buff2,Buf_Size);
try
if F1.Size>F2.Size then Result:=F2.Size+1
else if F1.SizeF1.Position) and (Result=0) do begin
BytesRead1 :=F1.Read(Buff1^,Buf_Size);
BytesRead2 :=F2.Read(Buff2^,Buf_Size);
if (BytesRead1=BytesRead2) then begin
for i:= 0 to BytesRead1-1 do begin
if Buff1^[i]<>Buff2^[i]
then begin
result:=F1.Position-BytesRead1+i+1;
break;
end;
end;
end else begin
Result:=-3;
break;
end;
end;
end;
except
Result:=-3;
end;
F1.Free;
F2.Free;
FreeMem(Buff1,Buf_Size);
FreeMem(Buff2,Buf_Size);
end;
iXT (2007-08-24 12:30:00) [21]Соглашусь. Вставлять чужой код, да еще который не понимаешь как работает, в свой проект, бррррррррр.
ЗЫ В код сильно не углублялся, но по первому взгляду, читает, сравнивает..... Что конкретно не работает?
ЗЗЫ Написать подобную функцию автору будет весма полезно, даже если она будет типа:
f1,f2: file of byte
....
Read(f1, a1);
Read(f2, a2);
if a1 <> a2......
Потом перейдет к TFileStream
ЗЗЗЫ
Почему Buf_Size=16384?
Игорь Шевченко (2007-08-24 12:29:00) [22]Сравнение двух файлов очень удобно делается через MMF
Riply (2007-08-24 12:24:00) [23]> [3] @!!ex © (24.08.07 12:21)
>Да я тоже так подумал.
>Но принципиально отличающееся не сделать.
За то, в ходе этого процесса(переписывания), узнаешь новые вещи и поймешь почему "не работает" :)
@!!ex (2007-08-24 12:21:00) [24]> [2] Riply © (24.08.07 12:17)
Да я тоже так подумал.
Но принципиально отличающееся не сделать. ВСе равно будет что-то сильно похожее на приведенное.
Riply (2007-08-24 12:17:00) [25]> [0] nikfel © (24.08.07 12:10)
Я бы выбросила эту функцию и попробовала бы написать свою. imho.
@!!ex (2007-08-24 12:13:00) [26]Что конкретно не работает?