![](/img/trans.png)
[英]How to check if a specific file exists in directory or any of its subdirectories
[英]Recursively iterate through subdirectories and add directory to a list, if it contains any file with a specific ending
从父目录开始,我要递归地遍历每个目录,并将目录名称添加到列表(如果它包含任何带有特定结尾的文件)。
我的第一个方法是
var allTestDirectories = new List<DirectoryInfo>();
Directory.GetFiles(parentDirectory, "*spec.js", SearchOption.AllDirectories)
.ForEach(specFile => allTestDirectories.Add(Directory.GetParent(specFile)));
var distinctTestDirectories = allTestDirectories.Distinct().ToList();
这不是很好,由于各种原因,最明显的原因之一是,当仅检测其中一个文件就足够时,它会循环访问所有带有所需结尾的文件。
我认为,使用LINQ的Any
函数,可以在保持声明性的同时更有效地做到这一点。 但是我该怎么做呢?
为什么不直接 :列举所有(子)目录,这些目录至少包含一个以要求的结尾结尾的文件?
var distinctTestDirectories = Directory
.EnumerateDirectories(parentDirectory, "*", SearchOption.AllDirectories)
.Where(dir => Directory.EnumerateFiles(dir, "*spec.js").Any())
.ToList();
您可以将GetParent放入选择中:
var allTestDirectories = new List<DirectoryInfo>();
var distinctTestDirectories = Directory.GetFiles(parentDirectory, "*spec.js", SearchOption.AllDirectories)
.Select(f => Directory.GetParent(f))
.ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.