从模式目录中获取文件
可能重复:
你能用多个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