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

Вниз

Сравнение файлов на winapi и поиск различий   Найти похожие ветки 

 
g-l-u-k   (2004-07-27 01:56) [0]

Уважаеммые мастера,меня к вам такой вопрос,можноли при помощи winapi сравнить два файла,а затем вывести лог о сходствах и различиях данных файлов.Если можно киньте исходник или ссылку.
Зарание благодарен.


 
Ertong ©   (2004-07-27 07:23) [1]

Файл1:
1234567890

Файл2:
123457890

Если ты должен определить в этих файлах одно отличие(удаление символа) то ты попал :), а если 5, то я думаю это не сложно реализовать.

Если ты все таки попал, то используй динамическое программирование.
Да, и тебе понадобися n*m памяти (n,m - это размеры двух файлов).

Про такую Api функцию не слышал, но я не исключаю ее существование.


 
Кириешки ©   (2004-07-27 08:52) [2]

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;


 
Игорь Шевченко ©   (2004-07-27 11:07) [3]


> Про такую Api функцию не слышал, но я не исключаю ее существование.


Функции, разумеется, нету. Но никто не мешает использовать готовую программу, вроде WinDiff - там алгоритм несколько посложнее, чем в [2]


 
g-l-u-k   (2004-07-27 11:40) [4]

Ещё один вопрос,как после всего этого вывести лог-файл?


 
Piter ©   (2004-07-27 15:28) [5]

g-l-u-k   (27.07.04 11:40) [4]

ну приплыли...
Молодой человек, а почему бы вам сразу не сказать - "Народ, напишите мне программу, которая делает то то".

Была бы куда правдивее...



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

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

Наверх




Память: 0.48 MB
Время: 0.034 c
1-1093860640
zorik
2004-08-30 14:10
2004.09.12
Повторный запуск программы


14-1093278061
Гость...
2004-08-23 20:21
2004.09.12
примеры использования fftw.dll


14-1092990043
guest_Dmitry
2004-08-20 12:20
2004.09.12
Как зарегистрировать класс ActiveX?


1-1093405354
COOLer
2004-08-25 07:42
2004.09.12
DataSet to XML


14-1093356079
Александр1
2004-08-24 18:01
2004.09.12
Star force