Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск одинаковых файлов [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()


Наверх

Титульная страница Поиск, карта сайта Написать письмо