我们的一个客户习惯性地使用很长的路径名称(几个嵌套的文件夹,名字很长),我们经常遇到"用户教育问题",以便将路径缩短到260个字符以下。
是否有技术上的解决方案,我们能否在Windows 7和Windows 2008 R2中按下某种开关,说"是的,忽略这些历史问题,让+260字符的路径名称发挥作用"。
P.S. 我读过文件、路径和命名空间的命名,但完全不信服。
只是提到一个我还没有看到在这里提到的技巧。
以这个文件为例:
C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf
。
这个完整的文件路径有290个字符长。外壳(Windows Explorer)和大多数命令行工具可能不会让你碰它。
像这样使用subst
命令:
subst X: "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"
现在你可以这样访问(以及删除、移动等)该文件:
X:\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf
。
而现在这个文件名只有~235个字符左右,所以你不会再遇到"文件名太长"的问题了。
在Windows API中,有一个臭名昭著的常数,称为MAX_PATH
。MAX_PATH是260个字符。NTFS文件系统实际上支持多达32,767个字符的文件路径。你仍然可以通过访问Unicode(或"wide")版本的Windows API函数来使用32,767个字符的长路径名称,也可以通过在路径前加上\?\
。
MAX_PATH'在Windows世界里*长*久以前就被设定为石头。我认为这与当时的ANSI标准有关......但这是微软现在很难改变的事情之一,因为现在我们有成千上万的程序和应用,包括一些由微软自己编写的程序,都使用
MAX_PATH`,如果突然改变这个常量,就会以奇怪的方式失败。(缓冲区溢出,堆损坏,等等。)
你可以通过使用\\?\C: 符号来绕过这个限制。 它很难看,但它支持文件长度达到2^15。
http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath