与长路径一起使用时,CreateDirectory 失败并出现错误 123

Posted

技术标签:

【中文标题】与长路径一起使用时,CreateDirectory 失败并出现错误 123【英文标题】:CreateDirectory fails with error 123 when used with a long path 【发布时间】:2013-10-17 05:59:44 【问题描述】:

我正在尝试克服 win32 API 路径上的 MAX_PATH 限制。正如这些 API(即 CreateDirectory)的 msdn 文档中所建议的那样,我已尝试在路径前添加 '\\?\' 但继续收到错误 123。

这是我的代码 -

wstring path = L"\\\\?\\D:\\<LongPath>";
if(!CreateDirectory(path.c_str(), NULL)) //translates to CreateDirectoryW 

 // Get the error using GetLastError()

错误 123 代表 - “文件名、目录名或卷标语法不正确。”。还有什么我需要做的不同的事情吗?

【问题讨论】:

只是为了好玩,你能告诉我们这些路径之一吗?另外,什么是卷格式(FAT、FAT32、NTFS 等)?最后,这个超长路径的任何单个子组件是否超过 255 个字符(通常,使用GetVolumeInformation() 来了解确切的限制)? 卷格式为 NTFS。路径中的一个目录包含超过 255 个字符,这导致了问题。修复后,CreateFirectory 适用于大于 255 的路径长度。感谢您的帮助! 【参考方案1】:

文件夹名称不能包含一些特殊字符,例如 ?:/*"

【讨论】:

路径前缀 \\?\ 用于允许长路径。是允许的

以上是关于与长路径一起使用时,CreateDirectory 失败并出现错误 123的主要内容,如果未能解决你的问题,请参考以下文章

C# WMI 在远程 PC 上运行一个 exe,然后在同一台 PC 上运行另一个 exe,然后在网络路径上调用 Directory.CreateDirectory 并失败

使用System.IO.Directory.CreateDirectory()时出现FileNotFoundException

棘轮服务器与长轮询

CSS 背景属性 - 简写与长格式

如何使用 Unicode 集将 std::string 传递给 CreateDirectory

C#中HttpClient使用注意:预热与长连接