关于 ReadFile() WinAPI,GetLastError 抛出错误 183。在这种情况下,"ERROR_ALREADY_EXISTS"是什么意思?



我正在调用ReadFile()WinAPI,将文件内容复制到我的VC++代码中的一个char数组中。已将GetLastError()放在ReadFile()之后。

for( read some n no: of files)
{
FileRead(fp,destCharArray,ByesToRead,NoOfBytesRead,NULL);
int ret = GetLastError();
}

只有在读取第一个文件时,GetLastError()才会返回183。对于所有人另一个文件读取其返回183。但即使183被退回文件的内容被复制到charArray。问题是第28个文件没有读取文件(此处也返回状态为183)。无论文件读取成功与否,183都是返回!

根据http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

错误代码183表示"error_ALREADY_EXISTS"。

在ReadFile()上下文中,上面的错误状态表示什么。?

有人能帮我弄清楚为什么吗?

您的代码错误地调用了GetLastError。如果上一个Win32 API调用失败,并且API通过GetLastError返回状态信息,则只应调用GetLastError

这里所讨论的API是ReadFile。文件上写着:

返回值

如果函数成功,则返回值为非零(TRUE)。

如果函数失败或异步完成,则返回值为零(FALSE)。若要获取扩展的错误信息,请调用GetLastError函数。

换句话说,只有当ReadFile返回FALSE时,您才能调用它。

你的代码应该是这样的:

if (!ReadFile(fp,destCharArray,ByesToRead,NoOfBytesRead,NULL))
{
    DWORD err = GetLastError();
    // handle error probably by raising exception
}

您的代码正在返回与调用ReadFile无关的早期故障的错误代码。

最后一个错误可能是由于先前调用CreateFile而导致的。如果为dwCreationDisposition指定CREATE_ALLWAYS或CREATE_NEW,此函数会将最后一个错误值设置为error_ALREADY_EXISTS。

重要的是要知道最后一个错误可以由任何函数设置。您应该始终检查函数的返回值,该值指示函数是否失败。

相关内容

  • 没有找到相关文章

最新更新