Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
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
|
|
![]() |
|
|
21:04:2008, 00:58
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 100 Регистрация: 27:02:2004 Пользователь №: 296 Репутация: 5
|
Если просто сравнить два файла - можно использовать Total Commander: Files - Compare by content.
Если хочется сделать свою программу - вот пара советов по улучшению быстродействия. 1. Считывать из файла лучше не один байт, а сразу много, где-нибудь порядка нескольких килобайт (например, 4кб). Для винчестера что первое, что второе - один оборот. 2. Сравнивать тоже лучше не побайтово, а массивами, например при помощи APIшной функции strncmp. 3. Размеры файлов логичнее сравнивать в самом начале, т.к. если они разные -- файлы тоже разные, и дальше можно не проверять. |
|
Сообщение
#2
|
|
|
|
21:04:2008, 10:33
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 122 Регистрация: 12:12:2007 Из: Волгоград Пользователь №: 14 203 Специализация: Программист, знаю HTML, JS, CSS, Паскаль. Репутация: 2
|
Спасибо!
P.S. 5 спасибо = 1 плюс. Жди ещё 4 спасиба от меня |
|
Сообщение
#3
|
|
![]() |
|
Текстовая версия | Сейчас: 17:05:2008 - 08:37 |