【发布时间】:2015-02-27 07:00:01
【问题描述】:
我正在尝试找出使用不包含 8.3 格式名称的通配符获取目录列表的最佳方法。我正在尝试使用 "3626*" 等通配符模式获取所有目录。问题是“Directory.GetDirectoriesandDirectoryInfo.GetDirectories”都包含长文件名和 8.3 格式名。因此我得到了我不想要的条目。例如,使用上面的通配符,我得到了 "3626 Burnt Chimney" 和 "3689 Lavista"。您可以使用命令提示符和命令 "dir 3626*" 看到相同的行为。这是在 Windows 7 32 位上。我怎样才能只返回长文件名?
【问题讨论】:
-
为什么不能在检索目录后进行过滤,例如
var files = new DirectoryInfo(@"C:\Path\").GetDirectories().Select(f => f.FullName).Where(name => name.StartsWith("3626")); -
关闭短名称支持应该是每个 LAN 管理员的待办事项列表中的一个项目符号,该功能今天完全没有任何剩余价值。确保这不会造成麻烦的最佳方法是确保每个人都启动 64 位操作系统,它不能再运行旧的 16 位代码。然而,这很少取决于程序员,在这种情况发生之前,您需要在代码中过滤结果。
-
@RagtimeWilly,您的语法很接近,d.Name 而不是 d.FullName,并且因为我正在寻找目录而不是文件,所以我对其进行了一些更改:
var dirs = new DirectoryInfo(outputFolder).GetDirectories().Select(d => d.Name).Where(name => name.StartsWith(prefix));这有效,但我有真的想使用 Directory 类而不是 DirectoryInfo 因为我不想要开销并最终得到这个:var outputDirectories = Directory.GetDirectories(outputFolder, prefix + "*").Where(path => Path.GetFileName(path).StartsWith(prefix));如果您将发布为答案,我会标记它。 -
@dblwizard 发布为答案 :)
标签: c# directory directoryinfo getdirectories