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