2016-05-24 9 views
1

Привет Im в настоящее время в процессе получения каталогов, как:GetDirectories возвращает мне строку с #

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. Благодаря !

ответ

4

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

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

Ну, так как Directory.GetDicrectories возвращает массив строк, что вы можете сделать, это добавить отборное к выписке LINQ

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

Нет причин для этого, поскольку DirectoryInfo уже имеет эту функциональность. – DVK

1

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

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