【问题标题】:GetDirectories - Find the directory that does not match the patternGetDirectories - 查找与模式不匹配的目录
【发布时间】:2013-06-24 22:32:03
【问题描述】:

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

【问题讨论】:

    标签: c# getdirectories


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果您希望所有目录不包含至少一个名称以“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());
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2014-02-04
          • 2023-03-15
          • 2016-01-19
          • 1970-01-01
          • 2013-10-19
          • 2020-07-12
          • 1970-01-01
          • 2014-04-14
          相关资源
          最近更新 更多