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文件的目录?
总有一种通过村庄运行坦克的方法:只需枚举*.*
,然后排除不匹配的模式。
如果您希望所有目录都不包含至少一个以"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)));