我有几次在不合时宜的时候遇到过这个问题:

尝试在具有深度路径的开源Java项目上工作 在源代码控制中存储深度fitness wiki树 试图使用Bazaar导入源代码控制树时出错

为什么会有这个限制?

为什么它还没有被移除?

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


当前回答

您可以将文件夹作为驱动器挂载。从命令行,如果你有一个路径C:\path\to\long\文件夹,你可以将它映射到驱动器号X:使用:

subst x: \path\to\long\folder

其他回答

您可以将文件夹作为驱动器挂载。从命令行,如果你有一个路径C:\path\to\long\文件夹,你可以将它映射到驱动器号X:使用:

subst x: \path\to\long\folder

至于如何应对Windows上的路径大小限制,使用7zip来打包(和解包)路径长度敏感的文件似乎是一个可行的解决方案。我已经使用它传输了几个IDE安装(那些Eclipse插件路径,哎呀!)和大量自动生成的文档,到目前为止还没有遇到任何问题。

不知道它是如何逃避260字符限制设置由Windows(从技术PoV),但嘿,它工作!

更多细节在他们的SourceForge页面这里:

NTFS实际上可以支持多达32,000个字符的路径名 长度。” 7-zip也支持这样长的名称。 但它在SFX代码中被禁用。有些用户不喜欢长路径,因为 他们不知道如何和他们一起工作。这就是我这么做的原因 在SFX代码中禁用它。

发布说明:

9.32 alpha 2013-12-01 改进了对超过260个字符的文件路径名的支持。 4.44 beta 2007-01-20 7-Zip现在支持超过260个字符的文件路径名。

重要提示:为了使其正常工作,你需要直接在7zip“Extract”对话框中指定目标路径,而不是将文件拖放到预期的文件夹中。否则,“Temp”文件夹将被用作临时缓存,一旦Windows资源管理器开始将文件移动到“最终休息位置”,你就会陷入同样的260个字符限制。有关更多信息,请参阅对该问题的答复。

这并不是严格意义上的,因为NTFS文件系统支持最多32k个字符的路径。你可以使用win32 api和“\\?”使用大于260个字符作为路径前缀。

. net BCL团队博客中关于漫长路径的详细解释。 一个小节选强调了长路径的问题

Another concern is inconsistent behavior that would result by exposing long path support. Long paths with the \\?\ prefix can be used in most of the file-related Windows APIs, but not all Windows APIs. For example, LoadLibrary, which maps a module into the address of the calling process, fails if the file name is longer than MAX_PATH. So this means MoveFile will let you move a DLL to a location such that its path is longer than 260 characters, but when you try to load the DLL, it would fail. There are similar examples throughout the Windows APIs; some workarounds exist, but they are on a case-by-case basis.

您可以使用PowerShell启用长路径名:

Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name LongPathsEnabled -Type DWord -Value 1 

另一个版本是在计算机配置/管理模板/系统/文件系统中使用组策略:

处理路径限制的一种方法是使用符号链接缩短路径条目。

例如:

创建一个C:\p目录,将短链接保存到长路径 mklink /J C:\p\foo C:\一些\疯狂\长\路径\foo 将C:\p\foo添加到您的路径中,而不是长路径