GetDirectories возвращает мне строку C#

Здравствуйте, я в настоящее время во время получения каталогов следующим образом:

dirs = Directory
  .GetDirectories(@"C:\Users\jphillips\Desktop\test", "*", SearchOption.AllDirectories)
  .Where(Path => reg.IsMatch(Path))
  .ToList();

Благодаря этому я могу отфильтровать все подкаталоги в каталоге и отфильтровать те, которые мне нужны, с помощью регулярного выражения, которое я предоставил ниже:

Regex reg = new Regex(@"\d+(\.\d+)+");

Моя проблема с моим новым списком строк каталогов. Я хочу использовать для них функции directoryinfo, такие как Parent, и получать каталоги этих каталогов. Есть ли способ конвертировать мои строковые пути в типы directyinfo. Спасибо!

3 ответа

Решение

Вы можете создать DirectoryInfo для корневого пути, и работать с этим вместо путей:

var rootDir = new DirectoryInfo(@"C:\Users\jphillips\Desktop\test");
dirs = rootDir.GetDirectories("*", SearchOption.AllDirectories)
              .Where(d => reg.IsMatch(d.FullName))
              .ToList();

Вы можете просто использовать класс DirectoryInfo для этого и передать свойство DirectoryInfo.Name своему регулярному выражению вместо всего экземпляра DirectoryInfo.

DirectoryInfo di = new DirectoryInfo(@"C:\Temp");
DirectoryInfo[] subDirectories = di.GetDirectories().Where(d => reg.IsMatch(d.Name));

Итак, так как Directory.GetDicrectories возвращает массив строк, вы можете просто добавить select в ваш оператор LINQ

 dirs = Directory.GetDirectories(@"C:\Users\jphillips\Desktop\test", "*",
        SearchOption.AllDirectories).Where(Path => reg.IsMatch(Path)).Select(x => new
        DirectoryInfo(x)).ToList();
Другие вопросы по тегам