代码之家  ›  专栏  ›  技术社区  ›  dblwizard

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

  •  0
  • dblwizard  · 技术社区  · 9 年前

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

    2 回复  |  直到 9 年前
        1
  •  1
  •   RagtimeWilly    9 年前

    检索目录后执行筛选,例如,

    var files = new DirectoryInfo(@"C:\Path\")
                       .GetDirectories()
                       .Select(f => f.Name)
                       .Where(name => name.StartsWith("3626"));
    
        2
  •  0
  •   Community Egal    7 年前

    您可以在此处找到更多信息: 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中不允许使用某些字符。名称,由这些名称处理。但您可能只是对过滤掉一些不需要的路径名感兴趣。

    推荐文章