2016-11-21 57 views
-1

所需的搜索描述:是searchPattern爲Directory.GetDirectories在C#

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

我試圖找到使用Directory.GetDirectories(路徑,是searchPattern)子目錄路徑,我要供應是searchPattern參數的正則表達式模式,但顯然,searchPattern不能是正則表達式。

是否有其他好方法來過濾包含v2或v3的文件名?

回答

1

Directory.GetDirectories不支持正則表達式,所以你不能使用它。如果你想使用正則表達式,並避免掃描目錄多次(削減必要的IO操作的量),你可以做到這一點的名單

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

那豈不是會更有效調用'Directory.GetDirectories(基本目錄)。凡(d => Regex.IsMatch(d, 「v [23]」))'所以你不枚舉目錄內容兩次? –

+0

取決於目錄的數量。如果它是成千上萬的,而且只有兩個目錄需要檢索,這個效率也是一樣的。 –

+0

您的答案會過濾大寫和小寫嗎?它似乎只會過濾小寫文件 – djskj189

2

我反而使用:

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(); 
相關問題