繁体   English   中英

递归地遍历子目录,并将目录添加到列表(如果它包含任何带有特定结尾的文件)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM