为什么具有长文件夹名称的 CreateDirectoryEx 不起作用?
Why CreateDirectoryEx with long folder name is not working?
这是我编写的示例代码,用于检查我是否能够创建名称长度大于 MAX_PATH
-
的文件夹
wstring s = L"D:\Test";
wstring s2 = L"\?\D:\datafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr700000000000000datafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr700000000000000datafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr700000000000000datafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr700000000000000datafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr700000000000000";
int ret = CreateDirectoryEx(s.c_str(), s2.c_str(), NULL);
int error = GetLastError();
没有成功,返回的错误是ERROR_PATH_NOT_FOUND。谁能告诉我代码中的问题是什么?
注意: "D:\Test" 文件夹为已有文件夹。我正在使用 Windows 7.
因为路径大小有限(我认为在 W7 上不能超过 160 个字符,但不确定)
不要混淆 最大文件名长度(路径部分) 和 最大路径长度 - 请参阅 Limits
所有文件系统的最大文件名长度 <= 255 个 Unicode 字符
和最大路径长度
32,760 个 Unicode 字符 每个路径部分不超过 255 个字符
最初的错误是使用 L"\?\"
前缀 - 实际上它必须是 L"\\?\"
因为 c/c++ 将 "\"
翻译成 \
- 但这已经只有语言特定的错误。
如果修复它 - 一定是错误 ERROR_INVALID_NAME
(从 NTSTATUS STATUS_OBJECT_NAME_INVALID
转换而来)因为您使用的路径组件超过 255 个字符
因为语法完全错误。你必须逃避反斜杠。所以前缀应该是L"\\?\"
.
wstring s2 = L"\\?\D:\dataff...";
这是我编写的示例代码,用于检查我是否能够创建名称长度大于 MAX_PATH
-
wstring s = L"D:\Test";
wstring s2 = L"\?\D:\datafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr700000000000000datafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr700000000000000datafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr700000000000000datafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr700000000000000datafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffr700000000000000";
int ret = CreateDirectoryEx(s.c_str(), s2.c_str(), NULL);
int error = GetLastError();
没有成功,返回的错误是ERROR_PATH_NOT_FOUND。谁能告诉我代码中的问题是什么?
注意: "D:\Test" 文件夹为已有文件夹。我正在使用 Windows 7.
因为路径大小有限(我认为在 W7 上不能超过 160 个字符,但不确定)
不要混淆 最大文件名长度(路径部分) 和 最大路径长度 - 请参阅 Limits
所有文件系统的最大文件名长度 <= 255 个 Unicode 字符
和最大路径长度 32,760 个 Unicode 字符 每个路径部分不超过 255 个字符
最初的错误是使用 L"\?\"
前缀 - 实际上它必须是 L"\\?\"
因为 c/c++ 将 "\"
翻译成 \
- 但这已经只有语言特定的错误。
如果修复它 - 一定是错误 ERROR_INVALID_NAME
(从 NTSTATUS STATUS_OBJECT_NAME_INVALID
转换而来)因为您使用的路径组件超过 255 个字符
因为语法完全错误。你必须逃避反斜杠。所以前缀应该是L"\\?\"
.
wstring s2 = L"\\?\D:\dataff...";