cod*_*ver 3 winapi file-read visual-c++ windows-error-reporting
我调用ReadFile()WinAPI将文件内容复制到我的VC++代码中的char数组.在ReadFile()之后立即放置了GetLastError().
for( read some n no: of files)
{
FileRead(fp,destCharArray,ByesToRead,NoOfBytesRead,NULL);
int ret = GetLastError();
}
Run Code Online (Sandbox Code Playgroud)
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
.您应该只GetLastError
在前一次Win32 API调用失败时调用,并且该API返回状态信息GetLastError
.
这里有问题的API是ReadFile
.该文件说:
返回值
如果函数成功,则返回值为非零(TRUE).
如果函数失败或异步完成,则返回值为零(FALSE).要获取扩展错误信息,请调用GetLastError函数.
换句话说,只有在ReadFile
返回时才能调用它FALSE
.
您的代码应如下所示:
if (!ReadFile(fp,destCharArray,ByesToRead,NoOfBytesRead,NULL))
{
DWORD err = GetLastError();
// handle error probably by raising exception
}
Run Code Online (Sandbox Code Playgroud)
您的代码将返回与调用无关的早期故障的错误代码ReadFile
.