如何在Windows中创建路径长度大于256的目录

7

我在文件夹路径中有几个层级。当路径超过256时,我无法创建其中的子文件夹或文件。是否有可能构建超过这个长度的路径?

有人能帮我解决吗?

4个回答

7
事实上,路径字符串的限制是260个字符。现在的底层操作系统可以支持更长的路径名,长达32,767个字符。为了给一个长名称的路径命名,你需要使用神奇的 \\?\ 前缀,并使用API的Unicode版本。
然而,许多工具不支持这样的长名称。一个典型的例子就是资源管理器,它不允许您创建超过260个字符的对象名。因此,我强烈建议您避免创建这样长的名称——这样做将在长期内为您节省很多心力。

1
我想知道是否有一种“打了补丁”的Explorer版本,可以默认支持长路径。 - JAB
@JAB 我的理解是,资源管理器这样做是出于政策而非技术原因。它试图阻止用户陷入其他工具无法处理的情况。最低公共分母。 - David Heffernan
我知道。也许用“黑客攻击”这个词比“修补”更合适。 - JAB
Dave,请问你能告诉我有哪些NT级别的Unicode API可以操作这个长路径吗? - Muthukumar Palaniappan
2
NT路径通常都是这种形式,我相信。260的限制只是在Win32层面上。调用CreateFileW,前缀路径加上“\?\”,你就可以使用了。 - David Heffernan
显示剩余2条评论

2
这应该能帮助您入门:http://msdn.microsoft.com/en-us/library/aa365247%28v=vs.85%29.aspx#maxpath。很遗憾,我认为这个问题不会很快消失,所以你最好熟悉一下这方面的知识。顺便说一句,如果您可以访问 robocopy(随Windows Vista和7打包,但也适用于XP),它支持长路径,您可以在更高的文件夹中创建文件/子文件夹,然后使用 robocopy 将子文件夹移动到其所需的更深的文件夹树位置。

1
从Windows 10.1607开始,常见的Win32文件和目录功能已经移除了MAX_PATH限制。但是,您必须选择新行为。 - Gabriel

1
根据这里的文档 http://msdn.microsoft.com/en-us/library/Aa365247,最大长度实际上约为32,000,但大多数Windows API仍然限制您使用MAX_PATH,即260。有一些Unicode API可以让您超越260的限制。
请参见此处 http://msdn.microsoft.com/en-us/library/aa363856

在此函数的ANSI版本中,名称限于MAX_PATH个字符。要将此限制扩展到32,767个宽字符,请调用该函数的Unicode版本并在路径前面添加\\?\。有关详细信息,请参阅命名文件。


0

这是对上面答案的补充。我从微软官方文档中提取了我认为相关的摘要:

最大路径长度限制
在 Windows API(有一些例外情况)中,路径的最大长度为 MAX_PATH,定义为 260 个字符。本地路径按以下顺序结构化:驱动器号、冒号、反斜杠、由反斜杠分隔的名称组件和终止空字符。
例如:"D:\some 256-character-path-string" -> 256

使用长路径
Windows API 有许多函数也有 Unicode 版本,允许最大总路径长度为 32,767 个字符的扩展长度路径。
要指定扩展长度路径,请使用“\?”前缀。例如,“\?\D:\very long path”。

相对路径
相对路径始终限制为最多 MAX_PATH 个字符。

在 Win10 中启用长路径
从 Windows 10.1607 开始,常见的 Win32 文件和目录函数已删除 MAX_PATH 限制。
但是,您必须选择新行为。

来自微软文档:
https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN#maximum-path-length-limitation


Delphi 用户警告:
IOUtils 存在问题。它不能与 Max_Path 结合使用。它在所有地方都使用 InternalCheckDirPathParam!

详情: TDirectory.GetDirectoryRoot 不能正确处理 Max_Path 字符路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接