Рекурсивный обход каталога в C#
Утилиты резервного копирования и поиска часто должны видеть все файлы дерева. Метод Directory.EnumerateFiles с параметром SearchOption.AllDirectories спускается во вложенные каталоги.
Маска "*" оставляет все расширения. При необходимости ее сужают до одного типа файлов.
Построим дерево с вложенной папкой и посчитаем файлы. В счёт попадают оба файла, корневой и вложенный:
string root = Path.Combine(Path.GetTempPath(), "walk-delta");
Directory.CreateDirectory(Path.Combine(root, "sub"));
File.WriteAllText(Path.Combine(root, "root.txt"), "r");
File.WriteAllText(Path.Combine(root, "sub", "leaf.txt"), "l");
int count = Directory.EnumerateFiles(root, "*", SearchOption.AllDirectories).Count();
Console.WriteLine(count); // выведет 2
Directory.Delete(root, true);
Создайте каталог shop. Внутри него создайте папку orders, а в orders - папку archive. Положите в orders файл order.txt, а в archive файлы old.txt и new.txt. Выведите, сколько файлов видно при обходе всего дерева.