Технологии

Решено

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

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

май 9, 2012 г.

  • Всего ответов: 2

  • Андрей FaceOff - аватарка

    Андрей FaceOff

    1-й в Технологиях

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

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

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

    — имя файла

    — размер

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

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

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

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

    май 9, 2012 г.
    Ответ понравился автору
    Лучший ответ по мнению автора
  • Андрей FaceOff - аватарка

    Андрей FaceOff

    1-й в Технологиях

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

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

    май 9, 2012 г.

Похожие вопросы

Решено

Как принудительно удалить объект в C#?

август 3, 2012 г.

Технологии

Решено

Работе с треем в WPF

июль 17, 2012 г.

Технологии

Решено

Заполнение dataGridView данными из array

ноябрь 25, 2011 г.

Технологии