Каждый пример, который я вижу, кажется, для того, чтобы рекурсивно добраться, файлы в подкаталогах использует файлы только. То, что я пытаюсь сделать, искать, папка для конкретного подкаталога, названного "xxx" затем, сохраняют тот путь к переменной, таким образом, я могу использовать его для других вещей.
Действительно ли это возможно без цикличного выполнения через все каталоги и сравнения по имени?
Ну
Directory.GetDirectories(root);
вернет вам массив подкаталогов.
Затем вы можете использовать Linq, чтобы найти интересующий вас:
IEnumerable<string> list = Directory.GetDirectories(root).Where(s => s.Equals("test"));
, который не является циклом в вашем коде, но, тем не менее, является циклом. Итак, окончательный ответ - «нет, вы не можете найти папку« test »без цикла».
Вы можете добавить .SingleOrDefault ()
в Linq, но это будет зависеть от того, что вы хотите сделать, если ваша «тестовая» папка не может быть найдена.
Если вы измените вызов GetDirectories
, чтобы включить SearchOption SearchOption.AllDirectories
, то он также выполнит рекурсию за вас. Очевидно, что в этом случае вызов может вернуть более одного элемента, если в вашем дереве каталогов было более одной папки с именем «test».
Вы можете использовать Windows Search, который также предоставляет api для .Net. Вот более подробная информация: Windows Search 4.0 для разработчиков
Прежде всего, «Нет, это невозможно без просмотра всех каталогов и сравнения по имени».
Я считаю, что ваш настоящий вопрос: «Есть ли существующий API, который будет обрабатывать для меня цикл по всем каталогам и сравнение по имени?»
Да, есть. Он называется Directory.Exists ()
:
var xxxPath = Path.Combine(parentFolder, "xxx");
if (Directory.Exists(xxxPath))
savedPath = xxxPath;
Да, я считаю, что единственное доступное решение (за исключением сторонних библиотек) - это рекурсивный поиск каталога посредством сравнения имен.