Форум: "WinAPI";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
ВнизСравнение файлов на 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.03 c