我有一个用于创建目录的函数。它使用 CreateDirectoryA()
CreateDirectory 报告它失败,但是当我使用 GetLastError() 检查错误代码时,它报告 ERROR_SUCCESS
代码:
BOOL isDirCreated = CreateDirectoryA(dirName.c_str(), NULL);
DWORD dw = GetLastError();
if (isDirCreated) {
if (!SetFileAttributesA(dirName.c_str(), attributes)) {
printf("SetFileAttributes() %s failed with (%d)", dirName.c_str(), GetLastError()));
return;
}
} else {
printf("CreateDirectory() %s Failed with (%d)", dirName.c_str(), dw));
if(ERROR_ALREADY_EXISTS != dw) {
return;
}
}
这将返回:(对函数的多次调用)
CreateDirectory() testDir Failed with (0)
CreateDirectory() testDir\dir Failed with (183)
即使 CreateDirectoryA 返回 false,也会创建目录。失败总是发生在第一次调用该函数时。所有后续调用都按预期工作。
为什么 CreateDirectory 在成功创建目录时会返回 false 的任何想法。
这是一个类似的帖子,但该解决方案对我不起作用:
ReadFile() 表示失败,但错误代码为 ERROR_SUCCESS
更新 原来这个错误是因为代码中包含的另一个头文件有一个函数“GetLastError”,另一个函数在一个单独的命名空间中,所以解决方案是调用 GetLastError,如下所示。
/*
* the :: will tell it to use the GetLastError that is available on the global
* scope. Most of Microsoft's calls don't have any namespace.
*/
DWORD dw = ::GetLastError();