2016-05-24 16 views
1

Hallo Im während zur Zeit Verzeichnisse wie folgt erhalten:GetDirectories gibt mir einen String C#

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

Damit kann ich alle Unterverzeichnisse in einem Verzeichnis auswählen, durch und filtern die, die ich mit der Regex möchte ich unten angegeben :

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

Mein Problem ist, mit meiner neuen Liste von Strings von Verzeichnispfaden. Ich möchte Verzeichnisinfo Funktionen auf ihnen wie Parent und Verzeichnisse dieser Verzeichnisse zu so stuff bekommen. Es gibt eine Möglichkeit, meine String-Pfade in directyinfo-Typen zu konvertieren. Vielen Dank !

Antwort

4

Sie einen DirectoryInfo für den Root-Pfad erstellen können, und die Arbeit mit diesem statt von Pfaden:

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

Nun, da Directory.GetDicrectories ein Array von Strings zurückgibt, was Sie tun können, ist eine select auf Ihre LINQ-Anweisung hinzufügen

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

Es gibt keinen Grund, dies zu tun, da DirectoryInfo bereits über diese Funktionalität verfügt. – DVK

1

Sie einfach die Klasse Directory, dies zu tun kann, und füttert die DirectoryInfo.Name Eigenschaft auf Ihre regex statt der gesamten Directory Instanz.

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