为什么Windows存在260个字符路径长度限制?

482

我曾在不合适的时候多次遇到这个问题:

  • 尝试处理深层路径的开源Java项目
  • 在源代码控制中存储深层Fitnesse wiki树
  • 使用Bazaar导入我的源代码控制树时出现错误

为什么存在此路径限制?

为什么它还没有被移除?

如何应对路径限制?不,转换到Linux或Mac OS X不是这个问题的有效答案 ;)


9
实际上,Windows(至少从Win2K开始)支持连接点(http://en.wikipedia.org/wiki/NTFS_junction_point),而Vista及以上版本支持NT符号链接(http://en.wikipedia.org/wiki/NTFS_symbolic_link)。 无论如何,虽然符号链接可以帮助使较长/嵌套的路径更友好,但如果遇到路径长度限制,我无法想象符号链接会如何有助于解决问题。 - Ashutosh Mehra
10
即使这个限制不存在,总会有很多其他限制,而每一个限制在某些时候都可能令人讨厌。问题是为什么这个限制如此之低?在8.3的年代之后,随着巨型硬件的出现,路径现在应该是一个动态分配的字符串,大小几乎没有限制。 - Roland
17
微软终于在Windows 10 Build 14352中解决了这个问题。 - Warren P
3
是的,看起来你需要修改应用程序清单(manifest)以使其支持长文件路径。 - Warren P
3
很遗憾,@PatrickSzalapski,这个问题已经得到解决。你可以在以下链接中查看详细信息:https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2156195-fix-260-character-file-name-length-limitation?tracking_code=32c8b19e00e95981623c3b65db8f21e9 - phuclv
显示剩余6条评论
11个回答

3
另一种应对方法是使用Cygwin,具体取决于您想如何处理文件(即如果Cygwin命令符合您的需求)。例如,它允许复制、移动或重命名甚至Windows资源管理器都无法处理的文件。当然,还可以像md5sum、grep、gzip等一样处理它们的内容。此外,对于您正在编码的程序,您可以将它们链接到Cygwin DLL并启用长路径(虽然我没有测试过这一点)。

1
它是如何避免限制的?它不是依赖于底层文件系统吗(这不是一个修辞问题)?你测试过吗?你能添加一个参考资料到你的答案中吗?(但请勿包含“编辑:”,“更新:”或类似的内容 - 答案应该看起来就像是今天写的。) - Peter Mortensen
Windows命令行确实支持32,767个路径长度。问题在于使用旧的WIN32 API的传统应用程序,该API仅支持硬编码、编译限制为260个字符。Windows资源管理器UI应用程序是问题所在。它仍然使用旧的WIN32 API,并不支持覆盖PATH以使用UNC PATH。虽然UI接受UNC PATH,但在按下回车键后会重新构建它并将其更改回来,然后在长路径上失败(即使启用了缩短名称)。我试过了。 - justdan23

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接