1

我有 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 文件的目录?

4

3 回答 3

2

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

于 2013-06-24T22:40:11.220 回答
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());
于 2013-06-24T22:39:33.767 回答
0

这是我的看法。它返回包含以您要查找的文本结尾且不区分大小写的文件的第一项(或 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)));           
于 2013-06-24T23:21:43.227 回答