Вопрос по реализации - вопрос №268221

Каким алгоритмом можно сравнить содержимое двух папок: имеется ввиду сравнить содержимое файлов и подкаталогов в этих папках и сформировать два списочка в которые будут занесены недостающие элементы. Думаю написать простенький синхронизатор который выявлял бы различия и по кнопке «выравнивал содержимое папок».

09.05.12
2 ответа

Лучший ответ по мнению автора

я бы построил список для каждой стороны - List<MyFileDescription>

элементы списка — объекты (или структуры) MyFileDescription описывающие файл:

— путь от узла файловой системы с которого начинается синхронизация

— имя файла

— размер

— хэш, например MD5, в качестве слепка содержимого файла. хэш для файла вычисляется локально на каждой стороне. для принятия решения о совпадении или различии содержимого файлов одного размера, достаточно передать для сравнения хэш. у идентичных по содержимому файлов хэш тоже совпадет

— (?) дата создания или модификации, но возможно дату нет смысла учитывать, это зависит от назначения такой системы. с другой строны при наличии одноименных файлов с различным содержимым, как раз дата модификации может быть аргументом для принятия решения какой выбрать в качестве источника при синхронизации. в этом случае требуется гарантия точного времени ОС на обеих сторонах и использоввание одного и того  же поясного времени (или потребуется разработка алгоритмов учета различий поясного времени, на пример приведени к Гринвичу). надо учитывать — слабым местом такого подхода может быть то что последние по времени изменения могут быть как раз ошибочными. время не является гарантией верных изменений и гарантия действительно точной временной отметки сама по себе не совсем тривиальна

для сравнения с помощью LINQ потребуется реализовать MyFileDescription интерфейсы IComparable и IComparer

так же можно использовать лямбды для запросов

09.05.12
Лучший ответ по мнению автора

Другие ответы

можно эмулировать дерево на основе TreeNode

возможно в каких то случаях это даст большую гибкость

09.05.12
Посмотреть всех экспертов из раздела Технологии > .Net/C#
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store