C#如何获取没有8.3格式名称的目录

时间:2015-02-27 07:00:02

标签: c# directory directoryinfo getdirectories

我试图找出使用不包含8.3格式名称的通配符获取目录列表的最佳方法。我试图使用通配符模式获取所有目录,例如" 3626 *" 。问题是' Directory.GetDirectories and DirectoryInfo.GetDirectories`包括长文件名和8.3格式名。因此,我收到了我不想要的条目。例如,使用上面的外卡,我得到" 3626 Burnt Chimney" " 3689 Lavista" 。您可以使用命令提示符和命令" dir 3626 *" 查看相同的行为。这是在Windows 7 32位。如何只返回长文件名?

2 个答案:

答案 0 :(得分:1)

检索目录后执行过滤器,例如

var files = new DirectoryInfo(@"C:\Path\")
                   .GetDirectories()
                   .Select(f => f.Name)
                   .Where(name => name.StartsWith("3626"));

答案 1 :(得分:0)

您可以在此处找到更多信息:List files in folder which match pattern

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中不允许使用某些字符。名称,由这些人处理。但您可能只想过滤掉一些不需要的路径名称。