2011-01-05 99 views
0

我正在嘗試使用Directory.GetFiles()命令的多個過濾器。Directory.GetFiles的多個過濾器?

所以說我想匹配.html和.css文件。我使用的是:

Directory.GetFiles(path,"*.html|*.css"); 

但是,我沒有看到任何文檔,但是這是支持的,它最終沒有匹配HTML或CSS文件。有什麼我失蹤?

+0

@Saeed遺憾,只是在我的問題一個錯字。這是我的源代碼中的一個點。 – Earlz 2011-01-05 11:11:14

回答

3

的Directory.GetFiles功能不支持多個過濾器。我的解決辦法:

string patter = "*.jpg|*.png|*.gif"; 
string[] filters = patter.Split('|'); 
foreach(string filter in filters) 
{ 
    // call Directory.GetFiles(path, filter) here; 
} 
+0

這是非常沒有效率的。呼叫Directory.GetFiles(路徑)一次,並過濾LINQ或類似的結果 – ppiotrowicz 2011-01-05 11:21:11

+2

@ppiotrowicz:這是如何低效?如果您使用LINQ方法,您必須檢索目錄中所有文件的列表,這可能是一個很長的列表。使用這種方法,您只能檢索相關條目。 – 2011-01-05 11:23:25

+1

@rune它取決於,如果由於本機Win32調用GetFiles很慢,只需獲取所有文件的列表並將其過濾到內存中,就可以更快地進行。它需要通過分析來確定哪些更快。 – 2011-01-05 11:29:25

1

還有避免了foreach循環的下降溶液(使用LINQ的幫助下):

string[] filters = new[]{"*.jpg", "*.png", "*.gif"}; 
string[] filePaths = filters.SelectMany(f => Directory.GetFiles(basePath, f)).ToArray();