克服 Windows 中的最大文件路径长度限制

Chr*_*rds 41 windows windows-server-2008 windows-7 ntfs

我们的一位客户习惯性地使用很长的路径名(几个嵌套文件夹,名称很长),我们经常遇到“用户教育问题”,以便将路径缩短到少于 260 个字符。

是否有可用的技术解决方案,我们能否在 Windows 7 和 Windows 2008 R2 中轻弹某种开关以说“是的,只需忽略这些历史问题,并使 +260 字符路径名起作用”。

PS 我已经阅读了命名文件,路径和命名空间,并且完全没有受到启发

Rya*_*ies 32

只是提到一个我在这里还没有看到提到的技巧。

以这个文件为例:

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 资源管理器)和大多数命令行实用程序可能不会让您接触它。

subst像这样使用命令:

subst X: "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"
Run Code Online (Sandbox Code Playgroud)

现在您可以访问(以及删除、移动等)该文件:

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(或“宽”)版本的 Windows API 函数,您仍然可以使用 32,767 个字符的长路径名,还可以通过在路径前加上\\?\.

MAX_PATH在石头上设置一个很长的在Windows世界时间前。我认为这与当时的 ANSI 标准有关......但这是微软现在很难改变的事情之一,因为现在我们有成千上万的程序和应用程序,包括一些由微软自己编写的,使用MAX_PATH如果常数突然改变,就会以奇怪的新方式失败。(缓冲区溢出、堆损坏等)

  • 我一直在采用类似于“subst”的方法,通过使用目录连接,如果您只是想进行一些快速更改,这可能更便于清理。我使用 [Link Shell Extension](http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html),但你可以像这样使用 `mklink` 命令:`mklink /JC:\Wow "C: \Folder1\Really Long Path\Such Recursion\So Deep\Wow"`。 (10认同)

sys*_*138 13

方法就在那里,但在微软重新编码文件浏览器小部件之前,我们几乎被这个老问题所困扰。这是次优的,但这就是它的工作原理。

  • MS 软件中的错误已在少数操作系统版本中未修复,这是一个新错误... (7认同)
  • Windows 10 1607 终于解决了文件浏览器问题,并有一些魔法可以欺骗 Win32 应用程序在这个巨大路径的奇怪新世界中工作:https://www.howtogeek.com/266621/how-to-make-windows- 10-accept-file-paths-over-260-characters/ (3认同)

小智 12

您可以通过使用 \\?\C: 符号来绕过此限制。它很难看,但它支持的文件长度最大为 2^15。

http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath

  • 是的,我读过,正如我所说(见我的链接)。但我如何从中受益呢?例如,我可以将驱动器映射到 \\?\something。我不明白。本文适用于使用 Windows API 的程序员。虽然我在需要时在 .NET 中编写代码,但我不使用 C++ 等,并且看不出这与使用 Windows 资源管理器和通用文件对话框等的客户员工有什么关系。 (2认同)
  • 7-zip 会很高兴地浏览和复制 \\?\C: 符号,这是值得的。 (2认同)

Jim*_*Nim 9

从 Windows 10 开始,Microsoft 现在有一个可用的修复程序,在命名文件、路径和命名空间MSDN 文章中对此进行了解释。

darthcoder 已经回答了有关\\?\C:符号解决方法的详细信息,但现在有一个注册表项HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)可用于删除单个系统的 MAX_PATH 限制。Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long paths如果需要,文章还提到了对组织或组范围实施的组策略控制的支持。

  • 这在文件资源管理器中不起作用,因为尽管系统和 NTFS 可以处理长路径,但资源管理器在它本身重新编码之前无法处理。 (2认同)