【发布时间】:2011-10-23 05:27:14
【问题描述】:
我在文件夹路径中有几个级别的目录。当路径超过 256 时,我无法从中创建子文件夹或文件。有没有机会建造超过这个长度的路径。 谁能帮帮我。
【问题讨论】:
我在文件夹路径中有几个级别的目录。当路径超过 256 时,我无法从中创建子文件夹或文件。有没有机会建造超过这个长度的路径。 谁能帮帮我。
【问题讨论】:
事实上,路径字符串的限制是 260 个字符。如今,底层操作系统可以支持更长的路径名up to 32,767 characters。要使用长名称命名路径,您需要使用神奇的 \\?\ 前缀,并使用 API 的 Unicode 版本。
但是,许多工具不支持如此长的名称。这种工具的一个典型例子是 Explorer,它不允许您创建名称超过 260 个字符的对象。因此,我强烈建议您避免创建如此长的名称 - 从长远来看,这样做会为您省去很多心痛。
【讨论】:
CreateFileW,在您的路径前加上`\\?`,您就可以开始了。
这应该可以帮助您入门:http://msdn.microsoft.com/en-us/library/aa365247%28v=vs.85%29.aspx#maxpath
遗憾的是,我认为这个问题不会很快消失,因此您最好熟悉一下这些内容。
顺便说一句,如果您可以访问支持长路径的robocopy(随 Windows Vista 和 7 一起提供,但也可用于 XP),您可以在更高的文件夹中创建文件/子文件夹然后使用 robocopy 将子文件夹移动到文件夹树中更深的所需位置。
【讨论】:
根据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 版本并将
\\?\添加到路径中。有关详细信息,请参阅命名文件。
【讨论】:
这是对上述答案的补充。我只从微软的官方文档中提取了我认为相关的摘要:
最大路径长度限制
在 Windows API(有一些例外)中,路径的最大长度是 MAX_PATH,
定义为 260 个字符。本地路径按以下顺序构建:
驱动器号、冒号、反斜杠、由反斜杠分隔的名称组件和终止空字符。
示例:“D:\some 256-character-path-string” -> 256
使用长路径
Windows API 有许多函数也有 Unicode 版本,以允许最大总路径长度为 32,767 个字符的扩展路径长度。
要指定扩展长度的路径,请使用“\?”字首。例如,“\?\D:\很长的路径”。
相对路径
相对路径始终限制为总共 MAX_PATH 个字符。
在 Win10 中启用长路径
从 Windows 10.1607 开始,MAX_PATH 限制已从常见的 Win32 文件和目录函数中删除。
但是,您必须选择加入新行为。
来自 Microsoft 文档:
https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN#maximum-path-length-limitation
Delphi 用户警告:
IOUtils 有问题。它不能与 Max_Path 一起使用。它到处使用 InternalCheckDirPathParam!
详情:TDirectory.GetDirectoryRoot does not handle correctly paths of Max_Path characters
【讨论】: