为什么具有长文件夹名称的 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...";