【发布时间】:2011-02-19 00:39:38
【问题描述】:
刚刚有一个有趣的案例。
我的软件报告了由于路径长度超过 MAX_PATH 导致的故障。
路径只是“我的文档”中的一个普通旧文档,例如:
C:\Documents and Settings\Bill\Some Stupid FOlder Name\A really ridiculously long file thats really very very very..........very long.pdf
总长度 269 个字符 (MAX_PATH==260)。
用户没有使用外部硬盘驱动器或类似的东西。这是 Windows 托管驱动器上的一个文件。
所以我的问题是这样的。我应该关心吗?
我不是说可以我处理长路径,我问应该我。是的,我知道“\?\”unicode破解一些 Win32 API,但似乎这种破解并非没有风险(因为它改变了 API 解析路径的方式),而且并非所有 API 都支持。
无论如何,让我陈述一下我的立场/主张:
- 首先,用户能够打破此限制的唯一方法可能是她使用的应用程序使用了特殊的 Unicode hack。这是一个 PDF 文件,所以她使用的 PDF 工具可能使用了这个 hack。
- 我试图重现这一点(通过使用 unicode hack)并进行了实验。我发现虽然该文件出现在资源管理器中,但我对此无能为力。我无法打开它,我无法选择“属性”(Windows 7)。其他常用应用无法打开该文件(例如 IE、Firefox、记事本)。 Explorer 也不会让我创建太长的文件/目录 - 它只是拒绝。命令行工具 cmd.exe 同上。
所以基本上,人们可以这样看:rouge 工具允许用户创建许多 Windows(例如资源管理器)无法访问的文件。我可以认为我不应该处理这个问题。
(顺便说一句,这不是对短最大路径长度的投票:我认为 260 个字符是个笑话,我只是说如果 Windows shell 和某些 API 不能处理 > 260 那么我为什么要这样做?)。
那么,这是一个公平的观点吗?我应该说“不是我的问题”吗?
更新: 刚刚有另一个用户遇到了同样的问题。这次是一个 mp3 文件。我错过了什么吗?这些用户如何创建违反 MAX_PATH 规则的文件?
【问题讨论】:
-
创建一个名称过长的文件很容易:只需将其中一个祖先目录重命名为足够长以使文件濒临崩溃。在您的示例中:
rename "C:\Documents and Settings\Bill\New Folder" "Some Stupid FOlder Name".