0

这是我编写的示例代码,用于检查我是否能够创建名称长度大于的文件夹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。

4

3 回答 3

5

不必混淆最大文件名长度(路径组件)最大路径长度- 请参阅限制

对于所有文件系统,最大文件名长度<= 255 个 Unicode 字符

最大路径长度 32,760 个 Unicode 字符,每个路径组件不超过 255 个字符


最初的错误是使用L"\\?\"前缀 - 实际上它必须是L"\\\\?\\"因为 c/c++ 转换"\\"\- 但这已经只是语言特定的错误。

如果修复它 - 必须是错误ERROR_INVALID_NAME(从 NTSTATUS 转换STATUS_OBJECT_NAME_INVALID)因为您使用超过 255 个字符的路径组件

于 2017-07-06T07:46:14.923 回答
3

因为语法完全错误。你必须逃避反斜杠。所以前缀应该是L"\\\\?\\".

wstring s2 = L"\\\\?\\D:\\dataff...";
于 2017-07-06T07:47:16.637 回答
-1

因为路径大小是有限的(我认为在 W7 上最多 160 个字符,但不确定)

于 2017-07-06T07:25:56.013 回答