我试图找出使用不包含 8.3 格式名称的通配符获取目录列表的最佳方法。我正在尝试使用通配符模式获取所有目录,例如"3626*"。问题是“Directory.GetDirectories and
DirectoryInfo.GetDirectories”都包含长文件名和 8.3 格式名称。因此我得到了我不想要的条目。例如,使用上面的通配符,我得到了"3626 Burnt Chimney"和"3689 Lavista"。您可以使用命令提示符和命令"dir 3626*"看到相同的行为。这是在 Windows 7 32 位上。我怎样才能只返回长文件名?
问问题
515 次
2 回答
1
检索目录后执行过滤器,例如,
var files = new DirectoryInfo(@"C:\Path\")
.GetDirectories()
.Select(f => f.Name)
.Where(name => name.StartsWith("3626"));
于 2015-02-27T22:23:41.723 回答
0
您可以在此处找到更多信息:列出与模式匹配的文件夹中的文件
RagtimeWilly 的评论也是我想要建议的。
有关 8.3 名称的良好解释,请参见http://en.wikipedia.org/wiki/8.3_filename
我只是写了一个小例子,也许你可以以此为起点:
using System.Text.RegularExpressions;
...
Regex re83 = new Regex(@"^[^.]{1,8}(\.[^.]{0,3})?$");
DirectoryInfo directoryInfo = new DirectoryInfo("C:\\windows");
foreach (string no83 in directoryInfo.GetDirectories("i*").Select(di => di.Name).Where(n => !re83.IsMatch(n)))
{
Console.WriteLine(no83);
}
在网上搜索,您会发现一些其他匹配 8.3 名称的正则表达式,有些更复杂。8.3 中不允许使用某些字符。名称,由那些处理。但是您可能只是对过滤掉一些不需要的路径名感兴趣。
于 2015-02-27T08:05:56.387 回答