对于 ReadFile() WinAPI,GetLastError 抛出错误 183。“ERROR_ALREADY_EXISTS”有何作用?在这种情况下意味着什么?
我正在调用 ReadFile() WinAPI 将文件内容复制到 VC++ 代码中的字符数组。将 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() 上下文中意味着什么?
任何人都可以帮我找出原因吗?
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您的代码错误地调用了
GetLastError
。仅当之前的 Win32 API 调用失败且该 API 通过GetLastError
返回状态信息时,才应调用GetLastError
。这里涉及的 API 是
ReadFile
。 文档说:换句话说,只有在
ReadFile
返回FALSE
时才必须调用它。您的代码应如下所示:
您的代码正在返回与调用
ReadFile
无关的早期故障的错误代码。Your code is incorrectly calling
GetLastError
. You should only callGetLastError
if the immediately prior Win32 API call failed, and that API returns status information throughGetLastError
.Here the API in question is
ReadFile
. The documentation says:In other words you must only call it if
ReadFile
returnsFALSE
.Your code should look something like this:
Your code is returning the error code for an earlier failure that is unrelated to the call to
ReadFile
.最后一个错误可能是由于之前调用 CreateFile 导致的。如果您为 dwCreationDisposition 指定 CREATE_ALWAYS 或 CREATE_NEW,则此函数会将最后一个错误值设置为 ERROR_ALREADY_EXISTS。
重要的是要知道最后一个错误可以由任何函数设置。您应该始终检查函数的返回值,该值指示函数是否失败。
The last error might result from calling CreateFile prior. This function sets the last error value to ERROR_ALREADY_EXISTS if you specify CREATE_ALWAYS or CREATE_NEW for dwCreationDisposition.
It is important to know that the last error can be set by any function. You should always check the return value of the function which indicates if the function failed.