![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск одинаковых файлов [D7, WinXP]
Chips © (2004-11-15 12:53:00)Необходимо реализовать поиск одинаковых файлов в разных каталогах. Не подскажете какими лучше средствами это делать, ну а в лучшем случае кусочек кода. =)
Спасибо
Alex Konshin (2004-11-16 06:35:00) [1]GuAV © (15.11.04 22:12) [10]
ИМХО Расчёт CRC и сравнение по CRC это быстрый способ для обработки группы файлов. Однако в случае когда сраыниваемых файлов немного (два например), проще тупо сравнить. А их таки может быть немного т.к. сначала сравнивать размер, файлы с разным размером не дубликаты. Это всё про критерий идентичность.
Для сравнения двух файлов достаточно стандартной утилиты fc.
Для сравнения трех файлов нужно сделать уже три сравнения и каждый файл прочитать два раза. Для четырех - 6 сравнений и 3 чтений каждого файла. Как мы видим, даже для нескольких файлов при использовании CRC уже экономия существенная.
У меня используется 2 CRC32 и размер файла, и если они все-таки совпадают, то файлы сравниваются по-честному (что практически случается только тогда, когда файлы действительно одинаковые), так что у меня ошибки не может быть в принципе.
У меня есть еще одна фича: у меня в случае одного NTFS диска можно дупликат заменить hardlink'ом на файл, так что и файлы вроде как остаются на месте, и место экономится.
GuAV (2004-11-15 22:21:00) [2]Игорь Шевченко © (15.11.04 22:15) [11]
В потрепаловку ? Я к тому, что раз уж заинтриговал, то колись в потрепаловке.
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1100546489&n=3
Игорь Шевченко (2004-11-15 22:15:00) [3]GuAV © (15.11.04 22:12) [10]
#ifdef offtopic
> зы Нахожусь под сильным впечателнием от сегодняшнего шоу,
> могу путать слова
В потрепаловку ? Я к тому, что раз уж заинтриговал, то колись в потрепаловке.
#endif
GuAV (2004-11-15 22:12:00) [4][7]
ИМХО Расчёт CRC и сравнение по CRC это быстрый способ для обработки группы файлов. Однако в случае когда сраыниваемых файлов немного (два например), проще тупо сравнить. А их таки может быть немного т.к. сначала сравнивать размер, файлы с разным размером не дубликаты. Это всё про критерий иентичность.
зы Нахожусь под сильным впечателнием от сегодняшнего шоу, могу путать слова
GuAV (2004-11-15 22:04:00) [5]Alex Konshin © (15.11.04 20:55) [7]
Думал еще сделать оценку подобия картинок
Dup Detector - оценивает подобие картинок, даже разных размеров и разрешений. ищет дубликаты. рульная вещь.
Игорь Шевченко (2004-11-15 21:20:00) [6]Реально и у меня есть такая утилитка, она определяет одинаковость по двум критериям - размер файла и CRC16. До сих пор не подводила :)
Alex Konshin (2004-11-15 20:55:00) [7]Реально у меня есть такая утилитка, только она преназначена больше для поиска одинаковых картинок. Реальный прирост производительности дает не MMX и MMF, а расчет CRC32 для первого блока и всего файла и, как следствие, неполное сравнение: незачем сравнивать файлы (или даже читать весь файл), если не совпали CRC32 первого блока или всего файла. То есть, для каждого файла у меня расчитывается и хранится размер, CRC32 первых 512 байт и CRC32 всего файла. Думал еще сделать оценку подобия картинок, но не было нужно, потому стало лениво.
Ihor Osov'yak (2004-11-15 19:56:00) [8][3] GuAV © (15.11.04 13:50)
>свой компарамем с использованием MMX, и т.д. гы-гы.
Использование механизма MMF подразумевает и использование "свой компарамем", может и с ММХ, так как в руках у нас будет два указателя на нетипизированные буфера. Не преобразовывать же соотв. нетипизированные буфера в строки :-). Хотя, кстати, в одном проекте, который пришлось оптимизировать, видел и такой шедевр...
> А критерии можут быть очень интересными
О чем и спич..
2 Fay, GuAV И это само собою, и FindClose.. Писалось в общем-то по-памяти, но описка получилась интересной.
GuAV (2004-11-15 19:01:00) [9]Fay © (15.11.04 14:00) [4]
CloseFindFile
Use CloseFindFile function to find a file that closely matches a file specified by hTemplateFile parameter :-)
Fay (2004-11-15 14:00:00) [10]>> CloseFindFile
?! 8)
GuAV (2004-11-15 13:50:00) [11]Ihor Osov'yak © (15.11.04 13:10) [2]
бинарное сравнение содержимого одинаковых по размеру файлов - использование memory mapping по сравнению с обычным чтением дает существенный прирост производительности.
А ещё больший прирост поизводительности даст свой компарамем с использованием MMX, и т.д. гы-гы.
А критерии можут быть очень интересными - см. программу Dup Detector.
Ihor Osov'yak (2004-11-15 13:10:00) [12]1. Определиться с критериями "одинаковости".
2. См. [1] + есно, FindNextFile, CloseFindFile + если нужно - рекурсию по вложенных директориях
3. Если согласно критериев "одинаковости" нужно делать бинарное сравнение содержимого одинаковых по размеру файлов - использование memory mapping по сравнению с обычным чтением дает существенный прирост производительности.
clickmaker (2004-11-15 12:59:00) [13]FindFirstFile()