V
Vadik(R)
Люди, как узнать идентичны ли два файла или нет? Я имею в виду само содержание файлов, а не дату создания или другие атрибуты. Вот, например, я долго качал файл размером 178Мб с одного сайта. И скачал этот же файл из локалки намного быстрее. Я хочу узнать, одинаковы ли эти два файла или разные. Может не смысла качать из внешки если одинаковые. Вот составил такой код: [codebox]program compare;
uses
SysUtils;
{$APPTYPE CONSOLE}
var i : longint;
f1,f2 : file of char;
c,d : char;
begin
assign(f1,'C:\file1.avi');
reset(f1);
assign(f2,'C:\file2.avi');
reset(f2);
while not eof(f1) do
begin
i:=i+1;
read(f1,c);
read(f2,d);
if c<>d then
begin
writeln(ошибка в байте: ',i,'.');
readln;
halt
end
end;
if (filesize(f1)<>filesize(f2)) or (NOT (eof(f1))) or (NOT (eof(f2))) then
begin
writeln('ошибка в размерах фалов.');
readln;
halt
end;
close(f1);
close(f2);
write('файлы идентичны.')
readln;
end.[/codebox]
Но это тупое сравнение, по-моему оно длилось около 1.5 часа! Ясно дело есть быстрее, так как если копировать файл размером 100 Мб из одной папки в другую, то это занимает секунды. Пожалуйста скажите как написать программу сравнивающую два файла быстрее. Или функцию, если такая есть!
uses
SysUtils;
{$APPTYPE CONSOLE}
var i : longint;
f1,f2 : file of char;
c,d : char;
begin
assign(f1,'C:\file1.avi');
reset(f1);
assign(f2,'C:\file2.avi');
reset(f2);
while not eof(f1) do
begin
i:=i+1;
read(f1,c);
read(f2,d);
if c<>d then
begin
writeln(ошибка в байте: ',i,'.');
readln;
halt
end
end;
if (filesize(f1)<>filesize(f2)) or (NOT (eof(f1))) or (NOT (eof(f2))) then
begin
writeln('ошибка в размерах фалов.');
readln;
halt
end;
close(f1);
close(f2);
write('файлы идентичны.')
readln;
end.[/codebox]
Но это тупое сравнение, по-моему оно длилось около 1.5 часа! Ясно дело есть быстрее, так как если копировать файл размером 100 Мб из одной папки в другую, то это занимает секунды. Пожалуйста скажите как написать программу сравнивающую два файла быстрее. Или функцию, если такая есть!