我调用ReadFile() WinAPI将文件内容复制到WinAPI代码中的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()上下文中,上述错误状态意味着什么?
有人能帮我找出原因吗?
发布于 2012-02-03 13:06:06
您的代码错误地调用了GetLastError
。只有在紧接先前的GetLastError
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
无关的早期故障的错误代码。
发布于 2012-02-03 12:38:47
最后一个错误可能是调用CreateFile优先级造成的。如果为ERROR_ALREADY_EXISTS指定CREATE_ALWAYS或CREATE_NEW,则此函数将最后一个错误值设置为dwCreationDisposition。
重要的是要知道,任何函数都可以设置最后一个错误。您应该始终检查该函数的返回值,该值指示该函数是否失败。
https://stackoverflow.com/questions/9128693
复制相似问题