【问题标题】:How do I return a DirectoryInfo object consisting of numeric folder names?如何返回由数字文件夹名称组成的 DirectoryInfo 对象?
【发布时间】:2017-03-22 12:07:41
【问题描述】:

我正在尝试查询文件夹并仅返回具有数字文件夹名称的文件夹。问题是我需要在 DirectoryInfo[] 对象中使用它。

我可以这样做(并且有效):

List<string> subDirList = Directory.GetDirectories(rootPath, "*", SearchOption.TopDirectoryOnly)
                           .Where(f => Regex.IsMatch(f, @"[\\/]\d+$")).ToList();

但我真的需要这样的东西:

DirectoryInfo[] subDirs = Directory.GetDirectories(rootPath, "*", SearchOption.TopDirectoryOnly)
                                   .Where(f => Regex.IsMatch(f, @"[\\/]\d+$"));

有什么建议吗?

【问题讨论】:

    标签: c# arrays linq directoryinfo


    【解决方案1】:

    您可以使用.Select(..) 将其映射到DirectoryInfo,然后使用ToArray():

    DirectoryInfo[] subDirs = Directory.GetDirectories(rootPath, "*", SearchOption.TopDirectoryOnly)
                                       .Where(f => Regex.IsMatch(f, @"[\\/]\d+$"))
                                       .Select(x => new DirectoryInfo(x)) //convert it to a DirectoryInfo
                                       .ToArray(); // make the result an Array

    【讨论】:

      【解决方案2】:

      实例化DirectoryInfo 类型的对象,然后进行查询。方法DirectoryInfo.GetDirectories 将返回所需的DirectoryInfo 类型数组

      DirectoryInfo dirInfo = new DirectoryInfo(yourpath);
      
      DirectoryInfo[] subDirs = dirInfo.GetDirectories("*", SearchOption.TopDirectoryOnly)
                               .Where(f => Regex.IsMatch(f.FullName, @"[\\/]\d+$")).ToArray();
      

      编辑:

      在 C# 7 中,您可以避免使用带有简单 int.TryParse 的正则表达式:

      DirectoryInfo[] subDirs = dirInfo.GetDirectories("*", SearchOption.TopDirectoryOnly)
                            .Where(f => int.TryParse(f.Name, out _)).ToArray();
      

      在 C# 7 之下,您需要一个 int 类型的额外变量作为 out 值

      【讨论】:

      • Directory.GetDirectories 不带路径,将rootPath 移动到DirectoryInfo 的构造函数,并将其从对GetDirectories 的调用中删除。
      • @LasseV.Karlsen thanx 提示,我是为了快速复制粘贴。 :) 包括必要的链接
      猜你喜欢
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多