繁体   English   中英

如何返回由数字文件夹名称组成的DirectoryInfo对象?

[英]How do I return a DirectoryInfo object consisting of numeric folder names?

我正在尝试查询文件夹并仅返回带有数字文件夹名称的文件夹。 问题是我在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+$"));

有什么建议么?

您可以使用.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

实例化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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM