可能重复:
Can you call Directory.GetFiles() with multiple filters?
是否有可能获得前任。来自目录的.c
和
.h
个文件。 Directory.GetFiles("C:\", ".c;.h");
的使用不起作用。调用Directory.GetFiles(...);
两次太糟糕了。:(
感谢。
答案 0 :(得分:6)
如果您使用的是.NET 4.0,我会选择Directory.EnumerateFiles
:
var files = from f in Directory.EnumerateFiles("C:\\")
where f.EndsWith(".c") || f.EndsWith(".h")
select f;
答案 1 :(得分:3)
无法在单个GetFiles()方法调用中指定多个过滤器。您可以找到替代方案here
答案 2 :(得分:1)
var query = from p in Directory.GetFiles(@"C:\").AsEnumerable()
where p.Contains(".c")
|| p.Contains(".h")
select p;
答案 3 :(得分:0)
答案 4 :(得分:0)
这里有一些有用的辅助函数来模拟多个过滤器:
// .NET 4.0 friendly
public static IEnumerable<string> EnumerateFiles(string path, params string[] filters)
{
return filters.Length == 0
? Directory.EnumerateFiles(path)
: filters.SelectMany(filter => Directory.EnumerateFiles(path, filter));
}
// .NET 3.5 friendly
public static IEnumerable<string> GetFiles(string path, params string[] filters)
{
return filters.Length == 0
? Directory.GetFiles(path)
: filters.SelectMany(filter => Directory.GetFiles(path, filter));
}
答案 5 :(得分:0)
对于.Net 3.5。
public IEnumerable<string> GetFiles(
string basePath,
params string[] searchPatterns)
{
if (searchPatterns == null || searchPatterns.Length == 0)
{
return Directory.GetFiles(basePath);
}
return Enumerable.SelectMany(searchPatterns,
p => Directory.GetFiles(basePath, p));
}
用法:
GetFiles(@"c:\", "*.c", "*.h");
您可能想要添加一些验证