2013-06-24 54 views
1

我有140个目录正在尝试处理。根据我的测试,有139个匹配我的文件模式的目录(* abc.txt)。GetDirectories - 查找与该模式不匹配的目录

我试图找到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文件?

回答

1

如果你想不包含至少一个TXT的文件,该文件名以“ABC”结尾的所有目录:

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)。您可以删除lambda表达式,使其更具可读性。

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