我有一个用于创建目录的函数。它使用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() says it failed, but the error code is 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();
答案 0 :(得分:1)
事实证明这个错误是由于代码中包含的另一个头部有一个函数“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();