有两点是现有答案中没有提到的
- 你可以使用扩展长度路径前缀来访问长路径
- 在Windows 10中,你可以启用长路径支持一般使用–不过注意,不是所有的应用程序都能使用长路径,你应该测试一下旧的软件。
长路径前缀
Windows API有一个特殊的功能,支持最长32k字符的Unicode路径名(每个元素的长度不超过255个字符)。
这通常会被误认为是UNC命名,但其实不然,尽管它是相关的。
用来告诉API使用长的Unicode路径的前缀是`\?有两点是现有答案中没有提到的
- 你可以使用扩展长度路径前缀来访问长路径
- 在Windows 10中,你可以启用长路径支持一般使用–不过注意,不是所有的应用程序都能使用长路径,你应该测试一下旧的软件。
长路径前缀
Windows API有一个特殊的功能,支持最长32k字符的Unicode路径名(每个元素的长度不超过255个字符)。
这通常会被误认为是UNC命名,但其实不然,尽管它是相关的。
用来告诉API使用长的Unicode路径的前缀是,如:
\?\D:\very long path
UNC名称通常在引用远程服务器上的路径时,以\servername\path name\file name
的形式使用。你可以把它和长路径前缀结合起来,这样就可以: \?\UNC\server\share
注意,一些写得很差,但很遗憾的是,有些应用程序不支持UNC文件路径,也不支持长路径前缀。https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath
长路径支持
这是最近的Windows 10版本中加入的一个选项。在写这篇文章的时候,它并没有被默认激活,因为它需要特定的应用程序支持。有趣的是,PowerShell已经内置了支持,所以启用此选项将允许在PowerShell脚本中直接使用长路径。
如果你有一个版本的Windows,你可以通过组策略编辑器激活它。或者你可以简单地使用下面的注册表更改。一如既往,在做任何事情之前,请先备份你要更改的注册表部分。
- 运行
regedit.exe
。
- 确认UAC提示。
- 导航到密钥:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
-
5.如果不存在,右键点击策略,从菜单中选择新的> Dword(32位)值。这应该包括 Windows Store 应用程序。
参考。https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/
UPDATE 2017-04-09
@maoizm指出了上面的注册表键的一个问题,所以我做了再挖掘一下。看起来你现在可以用系统键设置长文件名支持:
HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)
&001
这仍然只适用于被特别设置为使用它的应用程序(需要在应用程序的manifest.xml中输入一个条目)。