I am calling ReadFile() WinAPI to copy the file contents to a char array, inside my VC++ code. Have placed GetLastError() immediately after ReadFile().
for( read some n no: of files)
{
FileRead(fp,destCharArray,ByesToRead,NoOfBytesRead,NULL);
int ret = GetLastError();
}
GetLastError() is returning 183 only when 1st file is read. For all other file reads its returning 183. But eventhough 183 is returned the contents of file are copied to charArray. And the problem is that the file read does not happen for some 28th file (here too return status is 183). Irrespective of successful or unsuccessful file read, 183 is returned!
According to http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx
error code 183 means "ERROR_ALREADY_EXISTS".
What does the above error status signify in ReadFile() context.?
Can anyone kindly help me in figuring out why?
Your code is incorrectly calling GetLastError
. You should only call GetLastError
if the immediately prior Win32 API call failed, and that API returns status information through GetLastError
.
Here the API in question is ReadFile
. The documentation says:
Return value
If the function succeeds, the return value is nonzero (TRUE).
If the function fails, or is completing asynchronously, the return value is zero (FALSE). To get extended error information, call the GetLastError function.
In other words you must only call it if ReadFile
returns FALSE
.
Your code should look something like this:
if (!ReadFile(fp,destCharArray,ByesToRead,NoOfBytesRead,NULL))
{
DWORD err = GetLastError();
// handle error probably by raising exception
}
Your code is returning the error code for an earlier failure that is unrelated to the call to ReadFile
.