Я хочу избежать дублирования файлов, используя контент на любом диске. Файлы могут быть в любых форматах. Я не знаю алгоритм ватта, который используется для быстрого поиска и как сравнивать все форматы данных. , Пожалуйста, помогите мне sirИзбегайте дублирования
ответ
Один простой способ проверить идентичный контент - рассчитать некоторую контрольную сумму для обоих файлов и сравнить их.
Вы можете сделать расчет MD5 по содержимому файла, а затем сравнить результаты.
Создать словарь <> который назначит список имен файлов для каждой длины файла в байтах. Заполните этот словарь, пройдя весь диск.
Dictionary<long,List<string>>
Теперь у вас есть файлы, отсортированные по их длине. Поскольку только один файл одинаковой длины может быть одним и тем же, у вас есть 90% выполненной работы. :-)
Теперь вам нужно сравнить содержимое файлов. Маленькие файлы (например, до 10 МБ) сравниваются с помощью грубой силы - загружают все файлы одного размера в память, сортируют их по содержимому и просматривают для дубликатов. (Сложность O (n * log2n), где n - количество файлов одинакового размера.) Длинные файлы сравниваются по-разному: загружайте только начальную часть файлов, например. 10 МБ, сортировать их и находить дубликаты, а затем продолжать только те, которые будут одинаковыми. Продолжайте рекурсивно - т.е. вызовите функцию compariosn для подписок для файлов с одинаковыми началами, загрузите следующие 10 МБ, сортируйте, сравните, вызовите рекурсивно и т. Д. Таким образом, вы получаете очень хорошую скорость, и каждый файл загружается только один раз, и вы надеваете Не нужно много памяти. Блок 10 МБ выбран, потому что это хороший компромисс между быстрыми последовательными чтениями и временем поиска жестких дисков.
Этот алгоритм должен быть быстрее, чем вычисление MD5 всех файлов, предложенных Max Kielland. Кроме того, вам не нужно ничего загружать дважды - если вы хотите использовать хэши, вам нужно загрузить файлы для вычисления хэшей, а затем снова загрузиться, если хэш будет одинаковым для сравнения содержимого, чтобы быть на 100% уверенным, что файлы одинаковы. Если у вас есть 100 одинаковых хэшей, у вас возникают большие проблемы с тем, как сравнивать эти файлы. Поэтому я предпочел бы то, что я написал выше, т. Е. Никаких хешей.
Иногда у дублированного контента есть причина. Не обходите удаление файлов, не проверяя, все ли работает.
- 1. Избегайте дублирования соединений Autobahn
- 2. Избегайте дублирования кода
- 3. Избегайте дублирования записей - HashSet
- 4. Избегайте дублирования элементов Python
- 5. Избегайте дублирования в LINQ
- 6. Избегайте дублирования записей
- 7. Избегайте дублирования обратного вызова
- 8. избегайте дублирования списка.
- 9. Избегайте дублирования вычислений OFFSET
- 10. Избегайте дублирования дивы горизонтально
- 11. Избегайте дублирования файлов локализации
- 12. Избегайте дублирования клона
- 13. Android - Избегайте дублирования макета
- 14. Избегайте дублирования кода SQL?
- 15. Избегайте дублирования голосов
- 16. Избегайте дублирования кода
- 17. Избегайте дублирования кода в F #
- 18. Избегайте дублирования вычислений в охранниками
- 19. дублирования Избегайте в Rails валидаторы
- 20. Избегайте дублирования включать в EF
- 21. Struts 2 Избегайте дублирования действий
- 22. Избегайте дублирования аргумента передается через (...)
- 23. Избегайте дублирования элементов в результатах
- 24. Избегайте дублирования с помощью jquery
- 25. Избегайте дублирования записей в цикле
- 26. Избегайте дублирования функций в JQuery
- 27. Laravel 4: избегайте дублирования записи
- 28. Избегайте дублирования задач в ManagedScheduledExecutorService
- 29. Избегайте дублирования вкладок в QTabWidget
- 30. Избегайте дублирования идентификаторов в php
Вы только говорите о поиске файлов с * идентичным * контентом (и/или метаинформацией) или «находите дублированный контент» более привлекательным в этом случае? –