从带有模式的目录中获取文件

时间:2010-09-23 06:13:50

标签: c# .net file directory

  

可能重复:
  Can you call Directory.GetFiles() with multiple filters?

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

感谢。

6 个答案:

答案 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)

使用扩展方法查看How to get files with multiple extensions

答案 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");

您可能想要添加一些验证