Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сравнение файлов [D7]


Страницы:   1 2

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]

Что конкретно не работает?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо