如何使用Directory.EnumerateFiles()应用多个搜索模式?

时间:2018-05-04 05:53:13

标签: c# linq .net-4.0

我使用下面的代码搜索具有特定扩展名的目录(及其子目录)中的文件:

Directory.EnumerateFiles(dir, Path.GetFileNameWithoutExtension(item) + ".ext1" , SearchOption.AllDirectories);

现在,我可以拥有不同扩展名的文件,例如“.ext1”,“。ext2”,“。ext3”。我想在搜索模式中将这些扩展组合起来,如下所示:

Directory.EnumerateFiles(dir, Path.GetFileNameWithoutExtension(item) + ".ext1||.ext2" , SearchOption.AllDirectories);

建议吗?

1 个答案:

答案 0 :(得分:6)

您可以使用自定义方法拆分模式字符串,然后调用EnumerateFiles

public static IEnumerable<string> MultiEnumerateFiles(string path, string patterns)
{
    foreach (var pattern in patterns.Split('|'))
        foreach (var file in Directory.EnumerateFiles(path, pattern, SearchOption.AllDirectories))
            yield return file;
}

使用yield,您可以获得与原始EnumerateFiles相同的延迟评估行为。