Как сравнить два дерева каталогов?

Есть дерево вот таких объектов, подскажите, как сравнить два таких дерева, чтобы получить два списка: добавленные файлы и каталоги и удаленные файлы и каталоги? Хотя бы идею какую-то, что-то сильно туплю.

public class Folder
{
    public string Path { get; set; }
    public DateTime LWT { get; set; }
    public int Depth { get; set; }
    public List<FileSystemInfo> Files { get; set; } = new List<FileSystemInfo>();
    public List<Folder> SubFolders { get; set; } = new List<Folder>();
}
  • Вопрос задан
  • 256 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Рекурсия. Функции передаются 2 каталога. Она сравнивает файлы в них и добавляет новые/пропавшие файлы в списки. Также смотрит на директории. Если какая-то директория новая, то другая рекурсивная функции добавляеет все файлы и каталоги в ней в список новых. Также удаленные директории добавляются в список. Если какая-то директория есть и там и там, то рекурсивно вызывйтесь от них.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
MANAB
@MANAB
Разрабатываю на C#: Web, Desktop, Gamedev
Ну для меня алгоритм выглядит следующим:
- если рутовые Folder.Path не совпадают, то выбирается одно из деревьев и по все Subfolders ищется Folder.path другого дерева, если не найдено - меняются местами. Если по итогу не найдено - это разные не совпадающие деревья
- Если найден общий root - разница это добавленнные/удаленные папки и деревья.
- далее от общего рута сравниваются списки папок и файлов и рекурсивно (либо циклично) как обход дерева происходит сравнение все SubFolders
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы