Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
Время: 1.346 c
14-1101480561
Alexander Panov
2004-11-26 17:49
2005.01.02
Победа Януковича. Противостояние. (продолжение)


14-1102729271
avk02
2004-12-11 04:41
2005.01.02
Несколько цитат из Дугласа Адамса


1-1103537255
tarasik
2004-12-20 13:07
2005.01.02
Есть ли встроеная функция которая возвращала бы количество


14-1103087651
antonn
2004-12-15 08:14
2005.01.02
мой препод ваще опух


3-1102404539
Lotus_Totus
2004-12-07 10:28
2005.01.02
Автоматически старт Interbase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский