虽然NTFS允许大约32,000个字符的路径,但你已经找到了 Win32 API的259个字符的路径长度限制 。
在Windows API中([链接文档]中讨论了一些例外),路径的最大长度为 MAX_PATH
,定义为260个字符。
(另外还有一个 NULL
附加到路径的终止字符,为我们提供259个可用字符。)
因为Explorer(以及几乎所有其他Windows应用程序)依赖Win32 API进行文件系统访问,所以不是 实际的 绕过这个限制,即使它是 可能 :
Windows API具有许多函数,这些函数也具有Unicode版本,以允许扩展长度路径,最大总路径长度为32,767个字符。这种类型的路径由用反斜杠分隔的组件组成,每个组件都取决于返回的值 lpMaximumComponentLength
的参数 GetVolumeInformation
function(此值通常为255个字符)。要指定扩展长度路径,请使用“\\?\”前缀。例如,“\\?\ D:\ 很长的路 ”。
不幸的是,你不能只打字 \\?\D:\very long path
进入资源管理器窗口。应用程序必须设计为利用这些API并处理非常长的路径名。
在Windows下访问扩展长度路径的一种方法是安装 Cygwin的 ,Windows的* nix仿真层。在我的测试中,Cygwin似乎没有受到限制 MAX_PATH
; bash和vi在路径长度为2,000个字符时没有问题。
请记住,即使您可以使用bash浏览扩展长度的路径,您也可能无法在常规Windows应用程序中打开这些路径中的文件。例如,输入 notepad
而工作目录是一个扩展长度的路径得到你
错误:当前工作目录的路径长于Win32工作目录允许的路径。无法从此处启动本机Windows应用程序。
并尝试 notepad "\\?\D:\very long path\file.txt"
也不起作用;它发布了,但只是说
“找不到文件......”试着用同样的东西 记事本+ + 崩溃了。 (可能是缓冲区溢出。)
访问深度在扩展长度路径中的特定文件的另一种选择是 缩短路径本身 通过创建NTFS 结点 。从提升的命令提示符:
D:\> mklink /J jct "\\?\D:\very\long\path"
您现在可以访问的内容了 D:\very\long\path\
从 D:\jct\
。你不会遇到任何路径长度问题,因为就资源管理器和其他应用程序而言,路径就是这样 D:\jct\
(管他呢)。 NTFS驱动程序处理透明地重定向路径(“重新分析点”)。
这种方法的缺点显然是你必须在你想要访问的文件附近创建一个联结;你仍然不能简单地浏览整个目录结构。
关于特殊字符( " * : < > ? \ |
),这只是一个禁忌。这些字符在Windows中具有特殊含义,因此无法在路径中使用它们。 (Cygwin允许您创建具有特殊字符的文件,但它是通过 替换字符 使用特殊的Unicode字符,然后在阅读时替换回来。在Linux或Explorer中查看这些Cygwin创建的文件看起来不正确,因为Unicode字符不会被替换回来。)
所有这些都说,你在做什么需要很长的路径?也许你可以通过重新评估你正在做的事情并避免长途径来让你的生活更轻松。你有机会 不管怎么说都不需要很长的路径 。