如何使用 Directory.EnumerateFiles() 应用多个搜索模式?
How to apply multiple search patterns with Directory.EnumerateFiles()?
我使用以下代码在具有特定扩展名的目录(及其子目录)中搜索文件:
Directory.EnumerateFiles(dir, Path.GetFileNameWithoutExtension(item) + ".ext1" , SearchOption.AllDirectories);
现在,我可以拥有不同扩展名的文件,例如“.ext1”、“.ext2”、“.ext3”。我想在我的搜索模式中组合这些扩展,如下所示:
Directory.EnumerateFiles(dir, Path.GetFileNameWithoutExtension(item) + ".ext1||.ext2" , SearchOption.AllDirectories);
有什么建议吗?
您可以使用自定义方法拆分模式字符串,然后调用 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
相同的惰性求值行为。
我使用以下代码在具有特定扩展名的目录(及其子目录)中搜索文件:
Directory.EnumerateFiles(dir, Path.GetFileNameWithoutExtension(item) + ".ext1" , SearchOption.AllDirectories);
现在,我可以拥有不同扩展名的文件,例如“.ext1”、“.ext2”、“.ext3”。我想在我的搜索模式中组合这些扩展,如下所示:
Directory.EnumerateFiles(dir, Path.GetFileNameWithoutExtension(item) + ".ext1||.ext2" , SearchOption.AllDirectories);
有什么建议吗?
您可以使用自定义方法拆分模式字符串,然后调用 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
相同的惰性求值行为。