Технологии
Решено
Вопрос по реализации - вопрос №268221
Каким алгоритмом можно сравнить содержимое двух папок: имеется ввиду сравнить содержимое файлов и подкаталогов в этих папках и сформировать два списочка в которые будут занесены недостающие элементы. Думаю написать простенький синхронизатор который выявлял бы различия и по кнопке «выравнивал содержимое папок».
май 9, 2012 г.
-
Всего ответов: 2
-
я бы построил список для каждой стороны - List<MyFileDescription>
элементы списка — объекты (или структуры) MyFileDescription описывающие файл:
— путь от узла файловой системы с которого начинается синхронизация
— имя файла
— размер
— хэш, например MD5, в качестве слепка содержимого файла. хэш для файла вычисляется локально на каждой стороне. для принятия решения о совпадении или различии содержимого файлов одного размера, достаточно передать для сравнения хэш. у идентичных по содержимому файлов хэш тоже совпадет
— (?) дата создания или модификации, но возможно дату нет смысла учитывать, это зависит от назначения такой системы. с другой строны при наличии одноименных файлов с различным содержимым, как раз дата модификации может быть аргументом для принятия решения какой выбрать в качестве источника при синхронизации. в этом случае требуется гарантия точного времени ОС на обеих сторонах и использоввание одного и того же поясного времени (или потребуется разработка алгоритмов учета различий поясного времени, на пример приведени к Гринвичу). надо учитывать — слабым местом такого подхода может быть то что последние по времени изменения могут быть как раз ошибочными. время не является гарантией верных изменений и гарантия действительно точной временной отметки сама по себе не совсем тривиальна
для сравнения с помощью LINQ потребуется реализовать MyFileDescription интерфейсы IComparable и IComparer
так же можно использовать лямбды для запросов
Лучший ответ по мнению автора -
можно эмулировать дерево на основе TreeNode
возможно в каких то случаях это даст большую гибкость
Похожие вопросы