窗口 256 个字符路径名限制

窗口 256 个字符路径名限制

经过长时间的研究,我终于发现,即使在最新的 Microsoft Windows 7 中,路径名也不能超过 256 个字符。我真的不明白为什么会有这么愚蠢的限制,因为十多年来,NTFS 可以毫无问题地处理长达约 32,000 个字符的路径长度!有没有可能改变这种情况?或者有什么实用的解决方案可以避免这种情况?

即使对于简单的用例(例如一些具有长文件名的嵌套照片目录)来说,260 个字符也只是很少的。

答案1

据微软称:

  • 传统的 Windows API 将路径名限制为 260 个字符,即使对于为最新版本开发的应用程序也是如此。

  • 使用 Unicode 感知 API 的应用程序可以使用最多允许 32767 个字符的路径形式。文件名必须以 为前缀\\?\,并且必须是绝对路径,例如\\?\c:\dir\file\\?\UNC\server\share\file。还有其他限制,请参阅参考资料了解详情。

如果您已成功创建并使用深层文件层次结构,并且需要使用因文件名长度而崩溃的应用程序,那么您可以尝试以下几种方法:

  • 使用mklink命令创建符号链接,并将使用它们的路径传递给您的应用程序。

  • 使用subst命令为目录分配驱动器号。

  • 从深层目录启动您的应用程序并向其传递短的相对路径。

  • 用它们的 8.3 别名(micros~1)替换一些长名称,假设它们仍然存在于 Windows 7 中。如果您有micros~1micros~2我不知道如何分辨哪个是哪个;也许运行 DOS command.com(再次假设 Windows 7 仍然可以做到这一点)。

答案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(略小一些,因为卷名在内核空间中被替换)

相关内容