2016-11-21 2 views
-1

gewünschte Suchbeschreibung:search für Directory.GetDirectories in C#

Any string that contains either v2 or v3 (case insensitive) 

Ich versuche, Unterverzeichnis Pfade mit Directory.GetDirectories (path, search) zu finden, und ich wollte das RegexMuster für search Argument liefern , aber anscheinend kann searchPattern nicht Regex-Ausdruck sein.

Gibt es noch andere gute Möglichkeiten, Dateinamen zu filtern, die v2 oder v3 enthalten?

Antwort

1

Directory.GetDirectories Regex nicht unterstützt, so dass Sie nicht verwenden können.

Ich würde dies statt:

foreach (string dir in Directory.GetDirectories(baseDir, "*v2*") 
         .Concat(Directory.GetDirectories(baseDir, "*v3*")) 
     ) 
{ 
} 
+0

Wäre es nicht etwas effizienter zu nennen 'Directory.GetDirectories (baseDir) .Where (d => Regex.IsMatch (d, "v [23]"))', so dass Sie nicht aufzählt Der Inhalt des Verzeichnisses zweimal? –

+0

Hängt von der Anzahl der Verzeichnisse ab. Wenn Tausende und nur zwei Verzeichnisse abgerufen werden, ist dies genauso effizient. –

+0

Würde Ihre Antwort Groß- und Kleinschreibung filtern? Es scheint, dass es nur Kleinbuchstaben filtert – djskj189

2

Wenn Sie einen regulären Ausdruck verwenden möchten, und vermeiden Scannen der Liste der Verzeichnisse mehrfach (schneiden die Menge der notwendigen IO-Operationen nach unten), können Sie dies tun:

var baseDir = "C:\\YourDirectory\\"; 
// Replace with your own Regex. 
var dirNames = new Regex("v2|v3", RegexOptions.Compiled | RegexOptions.IgnoreCase); 
var dirsFiltered = 
    Directory.EnumerateDirectories(baseDir).Where(dir => dirNames.IsMatch(dir)).ToArray(); 
Verwandte Themen