2011-01-05 103 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();