Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> Сравнение файлов
Vadik(R)
Вставить ник
сообщение 19:04:2008, 16:50
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 122
Регистрация: 12:12:2007
Из: Волгоград
Пользователь №: 14 203
Специализация: Программист, знаю HTML, JS, CSS, Паскаль.



Репутация: - 2 +


Люди, как узнать идентичны ли два файла или нет? Я имею в виду само содержание файлов, а не дату создания или другие атрибуты. Вот, например, я долго качал файл размером 178Мб с одного сайта. И скачал этот же файл из локалки намного быстрее. Я хочу узнать, одинаковы ли эти два файла или разные. Может не смысла качать из внешки если одинаковые. Вот составил такой код:
CODE
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.

Но это тупое сравнение, по-моему оно длилось около 1.5 часа! Ясно дело есть быстрее, так как если копировать файл размером 100 Мб из одной папки в другую, то это занимает секунды. Пожалуйста скажите как написать программу сравнивающую два файла быстрее. Или функцию, если такая есть!
Подняться вверх 
 
Сообщение #1
 
Новая тема 
Ответов (1 - 2)
Yason
Вставить ник
сообщение 21:04:2008, 00:58
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 100
Регистрация: 27:02:2004
Пользователь №: 296



Репутация: - 5 +


Если просто сравнить два файла - можно использовать Total Commander: Files - Compare by content.
Если хочется сделать свою программу - вот пара советов по улучшению быстродействия.
1. Считывать из файла лучше не один байт, а сразу много, где-нибудь порядка нескольких килобайт (например, 4кб). Для винчестера что первое, что второе - один оборот.
2. Сравнивать тоже лучше не побайтово, а массивами, например при помощи APIшной функции strncmp.
3. Размеры файлов логичнее сравнивать в самом начале, т.к. если они разные -- файлы тоже разные, и дальше можно не проверять.
Подняться вверх 
 
Сообщение #2
Vadik(R)
Вставить ник
сообщение 21:04:2008, 10:33
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 122
Регистрация: 12:12:2007
Из: Волгоград
Пользователь №: 14 203
Специализация: Программист, знаю HTML, JS, CSS, Паскаль.



Репутация: - 2 +


Спасибо!

P.S. 5 спасибо = 1 плюс. Жди ещё 4 спасиба от меня smile.gif
Подняться вверх 
 
Сообщение #3


Быстрый ответ  Ответить  Новая тема 

> Быстрый ответ
Полужирный
Курсив
Подчеркнутый
Вставить изображение
Смайлики
Цитата
Код
 
 Отправлять уведомления об ответах на e-mail |  Включить смайлики |  Добавить подпись
   

 

RSS Текстовая версия Сейчас: 17:05:2008 - 08:37
с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net