2011-01-16 10 views
0

Я хочу избежать дублирования файлов, используя контент на любом диске. Файлы могут быть в любых форматах. Я не знаю алгоритм ватта, который используется для быстрого поиска и как сравнивать все форматы данных. , Пожалуйста, помогите мне sirИзбегайте дублирования

+1

Вы только говорите о поиске файлов с * идентичным * контентом (и/или метаинформацией) или «находите дублированный контент» более привлекательным в этом случае? –

ответ

0

Один простой способ проверить идентичный контент - рассчитать некоторую контрольную сумму для обоих файлов и сравнить их.

Вы можете сделать расчет MD5 по содержимому файла, а затем сравнить результаты.

0

Создать словарь <> который назначит список имен файлов для каждой длины файла в байтах. Заполните этот словарь, пройдя весь диск.

Dictionary<long,List<string>> 

Теперь у вас есть файлы, отсортированные по их длине. Поскольку только один файл одинаковой длины может быть одним и тем же, у вас есть 90% выполненной работы. :-)

Теперь вам нужно сравнить содержимое файлов. Маленькие файлы (например, до 10 МБ) сравниваются с помощью грубой силы - загружают все файлы одного размера в память, сортируют их по содержимому и просматривают для дубликатов. (Сложность O (n * log2n), где n - количество файлов одинакового размера.) Длинные файлы сравниваются по-разному: загружайте только начальную часть файлов, например. 10 МБ, сортировать их и находить дубликаты, а затем продолжать только те, которые будут одинаковыми. Продолжайте рекурсивно - т.е. вызовите функцию compariosn для подписок для файлов с одинаковыми началами, загрузите следующие 10 МБ, сортируйте, сравните, вызовите рекурсивно и т. Д. Таким образом, вы получаете очень хорошую скорость, и каждый файл загружается только один раз, и вы надеваете Не нужно много памяти. Блок 10 МБ выбран, потому что это хороший компромисс между быстрыми последовательными чтениями и временем поиска жестких дисков.

Этот алгоритм должен быть быстрее, чем вычисление MD5 всех файлов, предложенных Max Kielland. Кроме того, вам не нужно ничего загружать дважды - если вы хотите использовать хэши, вам нужно загрузить файлы для вычисления хэшей, а затем снова загрузиться, если хэш будет одинаковым для сравнения содержимого, чтобы быть на 100% уверенным, что файлы одинаковы. Если у вас есть 100 одинаковых хэшей, у вас возникают большие проблемы с тем, как сравнивать эти файлы. Поэтому я предпочел бы то, что я написал выше, т. Е. Никаких хешей.

0

Иногда у дублированного контента есть причина. Не обходите удаление файлов, не проверяя, все ли работает.

Смежные вопросы