窗口256个字符的路径名限制


17

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

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


1
我认为担心的是,有些较旧的程序对路径应该有多长进行硬编码,因此,如果尝试在较长的路径上使用它们,它们将以有趣的方式爆炸。
dsolimano 2010年

Linux操作系统有此问题吗?
AHORN

Answers:


18

根据微软的说法:

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

  • 使用支持Unicode的API的应用程序可以使用一种路径形式,最多允许32767个字符。文件名必须带有前缀\\?\,并且必须是绝对路径,例如\\?\c:\dir\file\\?\UNC\server\share\file。还有其他限制,有关详细信息,请参见参考。

如果您已经成功创建和使用了一个深层次的文件层次结构,并且需要使用一个由于文件名长度而引爆的应用程序,则可以尝试以下操作:

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

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

  • 从深层目录启动应用程序,并将其传递给较短的相对路径。

  • micros~1假设某些长名称用它们的8.3别名()代替,假设这些别名在Windows 7中仍然存在。如果您micros~1旁边有micros~2,我不知道如何分辨哪个。也许运行DOS command.com(同样,假设Windows 7仍然可以做到)。


3
好吧,即使Win7的Windows资源管理器似乎也使用传统的API!太可惜了。

3
更反斜杠`\\。\`:-)?
圈O

@Gilles,整个系统的micros〜1和micros〜2是标准化的还是随机的?
Pacerier '17

@Pacerier首先创建的目录将获取micros~1,因此它基本上是随机的。
吉尔斯(Gilles)'所以

0

您可以对所有文件夹和文件使用简称(8.3)。

您需要确保已启用它们。

长文件名被认为是任何超出短MS-DOS(也称为8.3)样式命名约定的文件名。通常,Windows将长文件名存储在磁盘上作为特殊目录条目,出于性能原因,取决于特定的文件系统,可以在系统范围内禁用长文件名。创建长文件名时,Windows可能还会创建一个简短的8.3形式的名称(称为8.3别名),并将其存储在磁盘上。可以为指定的卷禁用此8.3别名。

(我的粗体)

您还必须编写一些代码以从长名称中获取短名称。

资源


2
大声笑...我很记得这些日子在Windows 95中,当时我们都拥有具有256个字符长文件名的超级duper FAT32!在当时(这天)那太好了,我真的很震惊,文件名限制在这些天仍然是个问题。2010!Windows确实是过时的……

0

NTFS中的文件/目录名称限制为255个unicode代码点,因为长度存储为字节。但是总路径长度没有固有限制。

许多Win32 API调用(包括资源管理器外壳程序)调用的长度限制为260-1。其他一些调用也可以使用\\?\前缀来获取最大32K的数据(因为卷名被替换为Kernel-land,所以少了一点)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.