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

Wpf*_*Bee 3 c# linq .net-4.0

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

Directory.EnumerateFiles(dir, Path.GetFileNameWithoutExtension(item) + ".ext1" , SearchOption.AllDirectories);
Run Code Online (Sandbox Code Playgroud)

现在,我可以使用不同的扩展名文件,如".ext1",".ext2",".ext3".我想在我的搜索模式中结合这些扩展,如下所示:

Directory.EnumerateFiles(dir, Path.GetFileNameWithoutExtension(item) + ".ext1||.ext2" , SearchOption.AllDirectories);
Run Code Online (Sandbox Code Playgroud)

建议好吗?

Adr*_*ian 7

您可以使用自定义方法拆分模式字符串,然后调用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;
}
Run Code Online (Sandbox Code Playgroud)

通过使用,yield您可以获得与原始相同的惰性评估行为EnumerateFiles.

  • @Enigmativity我现在额外检查.它确实懒惰地评价.https://dotnetfiddle.net/Y0EXnX请在发布之前进行研究.我期待拥有linq金徽章的人更多. (3认同)