GetDirectories-查找与模式不匹配的目录

本文关键字:不匹配 模式 查找 GetDirectories- | 更新日期: 2023-09-27 18:19:55

我有140个目录要处理。根据我的测试,有139个目录符合我的文件模式(*abc.txt)

我试图找到1目录来验证它实际上没有*abc.txt。

我该怎么做?

下面的代码给了我140个目录的编号:

var directoryCount = from subdirectory in Directory.GetDirectories(paramStartFilePath, "*", SearchOption.AllDirectories)
                     where Directory.GetDirectories(subdirectory).Length == 0
                     select subdirectory;

我正在收集基于以下模式的文件:

dirInfoFiles= new DirectoryInfo(startFilePath);
IEnumerable<FileInfo> listFiles = dirInfoFiles.EnumerateFiles("*abc.txt, System.IO.SearchOption.AllDirectories);

如何找到不包含.txt文件的目录?

GetDirectories-查找与模式不匹配的目录

总有一种通过村庄运行坦克的方法:只需枚举*.*,然后排除不匹配的模式。

如果您希望所有目录都不包含至少一个以"abc"结尾的txt文件:

IEnumerable<DirectoryInfo> matchingDirs = dirInfoFiles.EnumerateDirectories("*.*", System.IO.SearchOption.AllDirectories)
   .Where(d => !d.EnumerateFiles().Any(f => f.Extension.ToUpper() == ".TXT" 
           && f.Name.EndsWith("abc", StringComparison.OrdinalIgnoreCase)));

换句话说,可能更可读:

IEnumerable<DirectoryInfo> matchingDirs = dirInfoFiles
    .EnumerateDirectories("*.*", System.IO.SearchOption.AllDirectories)
    .Where(d => !d.EnumerateFiles("*abc.txt").Any());

这是我的看法。它返回第一个项(或null),该项包含以您要查找的文本结尾的文件,并且不区分大小写。您可以删除Lambda以使其更可读。

 var directory = Directory.GetDirectories((paramStartFilePath, "*", SearchOption.AllDirectories)
                    .FirstOrDefault(x => new DirectoryInfo(x).EnumerateFiles().Any(f => !f.Name.EndsWith("abc.txt",true,CultureInfo.CurrentCulture)));