经过长时间的研究,我终于发现,即使在最新的 Microsoft Windows 7 中,路径名也不能超过 256 个字符。我真的不明白为什么会有这么愚蠢的限制,因为十多年来,NTFS 可以毫无问题地处理长达约 32,000 个字符的路径长度!有没有可能改变这种情况?或者有什么实用的解决方案可以避免这种情况?
即使对于简单的用例(例如一些具有长文件名的嵌套照片目录)来说,260 个字符也只是很少的。
答案1
传统的 Windows API 将路径名限制为 260 个字符,即使对于为最新版本开发的应用程序也是如此。
使用 Unicode 感知 API 的应用程序可以使用最多允许 32767 个字符的路径形式。文件名必须以 为前缀
\\?\
,并且必须是绝对路径,例如\\?\c:\dir\file
或\\?\UNC\server\share\file
。还有其他限制,请参阅参考资料了解详情。
如果您已成功创建并使用深层文件层次结构,并且需要使用因文件名长度而崩溃的应用程序,那么您可以尝试以下几种方法:
答案2
您可以对所有文件夹和文件使用短名称(8.3)。
但您需要确保它们已启用。
任何超出短 MS-DOS(也称为 8.3)样式命名约定的文件名都被视为长文件名。通常,Windows 将长文件名作为特殊目录条目存储在磁盘上,出于性能原因,可以全系统禁用取决于特定的文件系统。当您创建长文件名时,Windows 可能还会创建该名称的短 8.3 格式(称为 8.3 别名),并将其也存储在磁盘上。可以为指定的卷禁用此 8.3 别名。
(我的粗体)
您还必须编写一些代码来从长名称中获取短名称。
答案3
NTFS 中的文件/目录名称限制为 255 个 Unicode 代码点,因为长度以字节存储。但路径总长度没有固有限制。
许多 Win32 API 调用(包括 explorer shell)确实有 260 - 1 的长度限制。其他一些调用可以使用 \\?\ 前缀来获得最多 32K(略小一些,因为卷名在内核空间中被替换)