我正在尝试处理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文件的目录?
答案 0 :(得分:2)
总是通过村庄方法运行坦克:只需枚举*.*
然后排除不匹配的模式。
答案 1 :(得分:1)
如果您希望所有目录中不包含至少一个名称以“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());
答案 2 :(得分:0)
这是我的看法。它返回包含以您要查找的文本结尾的文件的第一个项(或null),并且不区分大小写。您可以删除lambdas以使其更具可读性。
var directory = Directory.GetDirectories((paramStartFilePath, "*", SearchOption.AllDirectories)
.FirstOrDefault(x => new DirectoryInfo(x).EnumerateFiles().Any(f => !f.Name.EndsWith("abc.txt",true,CultureInfo.CurrentCulture)));