Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.02;
Скачать: CL | DM;

Вниз

Поиск одинаковых файлов   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2005.01.02;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.043 c
14-1102721809
Piter
2004-12-11 02:36
2005.01.02
Кто-нибудь пользовался Skype?


14-1102705691
Pat
2004-12-10 22:08
2005.01.02
Прикольный баннер


1-1103451288
idiliya
2004-12-19 13:14
2005.01.02
Как создавать thumbnails для больших изображений?


14-1102958564
Чеширский_Кот
2004-12-13 20:22
2005.01.02
Шевченко получит "Золотой мяч"


4-1100783516
Balkon
2004-11-18 16:11
2005.01.02
Проблема с организацией работы с железкой через Com-порт...