我正在调用ReadFile()WinAPI将文件内容复制到我的VC ++代码中的char数组中。在ReadFile()之后立即放置了GetLastError()。
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()上下文中表示什么?
任何人都可以帮助我找出原因吗?
答案 0 :(得分:8)
您的代码错误地调用了GetLastError
。如果之前的Win32 API调用失败,那么您应该只调用GetLastError
,并且该API会通过GetLastError
返回状态信息。
此处所涉及的API为ReadFile
。 documentation说:
返回值
如果函数成功,则返回值为非零( TRUE )。
如果函数失败或异步完成,则返回值为零( FALSE )。要获取扩展错误信息,请调用 GetLastError 函数。
换句话说,只有在ReadFile
返回FALSE
时才能调用它。
您的代码应如下所示:
if (!ReadFile(fp,destCharArray,ByesToRead,NoOfBytesRead,NULL))
{
DWORD err = GetLastError();
// handle error probably by raising exception
}
您的代码返回的错误代码表示与ReadFile
调用无关的早期失败。
答案 1 :(得分:0)
最后一个错误可能是因为先调用CreateFile。如果为 dwCreationDisposition 指定CREATE_ALWAYS或CREATE_NEW,则此函数将最后一个错误值设置为ERROR_ALREADY_EXISTS。
重要的是要知道任何函数都可以设置最后一个错误。您应该始终检查函数的返回值,该值指示函数是否失败。