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


36

我们的一位客户习惯使用非常长的路径名(几个嵌套的文件夹,并带有长名称),并且我们经常遇到“用户培训问题”,以将路径缩短到少于260个字符。

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

PS我已经阅读并且完全被命名文件,路径和命名空间所统一


3
我们到了2018年,但问题仍然存在于ROBOCOPY中。255个限制。那些超过它的只会发出哔哔声,但不会复制。
SDsolar

@SDsolar:您使用的是旧版本的robocopy吗?
Naikrovek '18

是的,我要说的是一样的-一个人必须专门使用robocopy,因为它可以处理长路径...
Rob Nicholson,

Answers:


12

可以使用这些方法,但是在Microsoft重新编码文件浏览器小部件之前,我们几乎已经陷入了这个老问题。它不是最理想的,但这就是它的工作方式。


5
错误在MS软件已经要松开了几个操作系统的发布,这是一个新的...
休伯特Kario

2
Windows 10 1607终于解决了文件浏览器问题,并具有一些向导来欺骗Win32应用程序以在巨大的陌生新世界中工作:howtogeek.com/266621/…–
HackSlash

28

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

以这个文件为例:

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

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个字符的文件路径。而且,您仍然可以通过访问Windows API函数的Unicode(或“宽”)版本,并通过在路径前面加上前缀来使用32,767个字符的长路径名\\?\

MAX_PATH在Windows世界中很久以前就已定型。我认为当时它与ANSI标准有关...但这是Microsoft现在很难更改的事情之一,因为现在我们有成千上万的程序和应用程序(包括一些由Microsoft自己编写的程序和应用程序)MAX_PATH如果常量突然更改,它将以奇怪的新方式失败。(缓冲区溢出,堆损坏等)


9
我一直在使用类似于subst使用目录结点的方法,如果您只是想进行一些快速更改,则清理起来可能更方便。我使用链接外壳扩展,但你可以只使用mklink命令,像这样:mklink /J C:\Wow "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"
Charles Grunwald 2015年

10

您可以使用\\?\ C:表示法来解决此限制。难看,但它支持的文件长度最大为2 ^ 15。

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


2
是的,正如我所说,我读过(请参阅我的链接)。但是我究竟如何从中受益呢?我可以将驱动器映射到\\?\ something。我不明白 本文适用于使用Windows API的程序员。虽然我在.NET做的代码在必要时我不使用C ++等,并不能看到这是如何相关的谁使用windows我的客户人员Explorer和通用文件对话框等等
克里斯托弗·爱德华兹

1
最终,没有任何东西。:-/可悲的是。
克里斯·K

@ChristopherEdwards可以创建联结到文件夹层次结构中较低的点。
休伯特·卡里奥

1
@ChristopherEdwards您可以链接c:\usr-data到`c:\ Users \ VeryLongUserName \ LongFolderName`并告诉他使用前者,但是如果他定期用40多个字符命名文件夹,则将无济于事
Hubert Kario

2
7-zip会很高兴地浏览和复制\\?\ C:表示法,物有所值。
马特·里昂斯

9

Microsoft现在从Windows 10开始具有针对此问题的可用修复程序,在“ 命名文件,路径和命名空间 MSDN”文章中对此进行了说明。

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


我还没有足够的时间进行全面的测试,但是到目前为止,该解决方案的结果参差不齐,并且无法确认这是否可以解决Windows [file] Explorer的问题。
JimNim

2
这在文件资源管理器中不起作用,因为尽管系统和NTFS可以处理长路径,但资源管理器只有重新编码后才能进行处理。
ingyhere

PS,您将需要使用资源管理器顶部此SO链接中的复制程序之一才能使其真正起作用。
ingyhere

1
好信息!在这种情况下,我可能只会坚持使用Robocopy。
JimNim
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.