我试图找出使用不包含8.3格式名称的通配符获取目录列表的最佳方法。我试图使用通配符模式获取所有目录,例如" 3626 *" 。问题是' Directory.GetDirectories and
DirectoryInfo.GetDirectories`包括长文件名和8.3格式名。因此,我收到了我不想要的条目。例如,使用上面的外卡,我得到" 3626 Burnt Chimney" 和" 3689 Lavista" 。您可以使用命令提示符和命令" dir 3626 *" 查看相同的行为。这是在Windows 7 32位。如何只返回长文件名?
答案 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中不允许使用某些字符。名称,由这些人处理。但您可能只想过滤掉一些不需要的路径名称。