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

时间:2013-06-24 22:32:04

标签: c# getdirectories

我正在尝试处理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文件的目录?

3 个答案:

答案 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)));