我正在尝试使用Directory.GetFiles()命令的多个过滤器。Directory.GetFiles的多个过滤器?
所以说我想匹配.html和.css文件。我使用的是:
Directory.GetFiles(path,"*.html|*.css");
但是,我没有看到任何文档,但是这是支持的,它最终没有匹配HTML或CSS文件。有什么我失踪?
我正在尝试使用Directory.GetFiles()命令的多个过滤器。Directory.GetFiles的多个过滤器?
所以说我想匹配.html和.css文件。我使用的是:
Directory.GetFiles(path,"*.html|*.css");
但是,我没有看到任何文档,但是这是支持的,它最终没有匹配HTML或CSS文件。有什么我失踪?
的Directory.GetFiles功能不支持多个过滤器。我的解决办法:
string patter = "*.jpg|*.png|*.gif";
string[] filters = patter.Split('|');
foreach(string filter in filters)
{
// call Directory.GetFiles(path, filter) here;
}
这是非常没有效率的。呼叫Directory.GetFiles(路径)一次,并过滤LINQ或类似的结果 – ppiotrowicz 2011-01-05 11:21:11
@ppiotrowicz:这是如何低效?如果您使用LINQ方法,您必须检索目录中所有文件的列表,这可能是一个很长的列表。使用这种方法,您只能检索相关条目。 – 2011-01-05 11:23:25
@rune它取决于,如果由于本机Win32调用GetFiles很慢,只需获取所有文件的列表并将其过滤到内存中,就可以更快地进行。它需要通过分析来确定哪些更快。 – 2011-01-05 11:29:25
此以前已经问(https://stackoverflow.com/questions/163162),并使用LINQ过滤结果的解决方案建议
6年后还没有新的东西? – 2017-01-15 11:02:36
还有避免了foreach循环的下降溶液(使用LINQ的帮助下):
string[] filters = new[]{"*.jpg", "*.png", "*.gif"};
string[] filePaths = filters.SelectMany(f => Directory.GetFiles(basePath, f)).ToArray();
@Saeed遗憾,只是在我的问题一个错字。这是我的源代码中的一个点。 – Earlz 2011-01-05 11:11:14