从模式目录中获取文件

可能重复:
你能用多个filter调用Directory.GetFiles()吗?

是否有可能获得前任。 来自目录的.c.h文件。 Directory.GetFiles("C:\", " .c; .h"); 不起作用。 调用Directory.GetFiles(...);太糟糕了Directory.GetFiles(...); 两次…… 🙁

谢谢。

在单个GetFiles()方法调用中无法指定多个filter。 你可以在这里找到替代品

如果您使用的是.NET 4.0,我将使用Directory.EnumerateFiles

 var files = from f in Directory.EnumerateFiles("C:\\") where f.EndsWith(".c") || f.EndsWith(".h") select f; 

你可以尝试这样的事情:

  var query = from p in Directory.GetFiles(@"C:\").AsEnumerable() where p.Contains(".c") || p.Contains(".h") select p; 

请参阅如何使用扩展方法获取具有多个扩展名的文件 。

这里有一些有用的辅助函数来模拟多个filter:

 // .NET 4.0 friendly public static IEnumerable 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 GetFiles(string path, params string[] filters) { return filters.Length == 0 ? Directory.GetFiles(path) : filters.SelectMany(filter => Directory.GetFiles(path, filter)); } 

对于.Net 3.5。

 public IEnumerable 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"); 

你可能想添加一些validation