Создайте программу, сравнивающие две структуры вложенных друг в друга папок - C#
Формулировка задачи:
В C# пару дней.
Задача: Создайте программу, сравнивающие две структуры вложенных друг в друга папок, заданных
пользователем в командной строке. Две папки считаются равными, если они имеют одинаковую
(по имени) вложенную систему файлов и подпапок. Выводятся отличающиеся папки из
подкаталогов всех уровней, при выводе имен подкаталогов используется отступ, равный четырем
пробелам для каждого уровня.
Как я понимаю есть две директории(пути к двум файлам).Я должен в каждой папке(две исходные папки) найти все подкаталоги(в каждом подкаталоге,может быть еще каталоги и файлы) и файлы.Запомнить их имена куда-то.
И сравнить эти данные двух этих папок.Если хоть одно отличие,то структуры не равны.И вывести то,чего нету в другой папке!
1.Верно?
2.Как я понял чтобы обойти ВСЁ нужна рекурсия...Ну как это все реализовать,я без понятия.
Решение задачи: «Создайте программу, сравнивающие две структуры вложенных друг в друга папок»
textual
Листинг программы
static void CatalogComparer(DirectoryInfo di1, DirectoryInfo di2, int level = 0)
{
var files1 = di1.GetFiles();
var fiels2 = di2.GetFiles();
//здесь пишите сравнение файлов текущего каталога и выводите каталог при первом несовпадении
var dirs1 = di1.GetDirectories();
var dirs2 = di2.GetDirectories();
//здесь пишите сравнение каталогов(если все файлы совпали)
//дальше вызываете этот же метод, но передаёте так параметры:
CatalogComparer(dirs1[i], dirs2[i], level + 1);
//это в случае одинакового количества директорий и их одинаковых имён
//в противном случае либо ищите те, которые совпадают
//либо придумываете более сложную логику по желанию
}
static void Main(string[] args)
{
//тут пример работы с аргументами командной строки
if(args.Length != 3)
{
Console.WriteLine("Неверное количество аргументов командной строки!");
Console.ReadKey(true);
return;
}
var di1 = new DirectoryInfo(args[1]);
var di2 = new DirectoryInfo(args[2]);
if (!di1.Exists || !di2.Exists)
{
Console.WriteLine("Один из каталогов не существует!");
}
else
{
CatalogComparer(di1, di2);
}
Console.ReadKey(true);
}