首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对于ReadFile() WinAPI,GetLastError抛出错误183。在这种情况下,"ERROR_ALREADY_EXISTS“是什么意思?

对于ReadFile() WinAPI,GetLastError抛出错误183。在这种情况下,"ERROR_ALREADY_EXISTS“是什么意思?
EN

Stack Overflow用户
提问于 2012-02-03 12:29:01
回答 2查看 8.8K关注 0票数 3

我调用ReadFile() WinAPI将文件内容复制到WinAPI代码中的char数组中。将GetLastError()放在ReadFile()之后。

代码语言:javascript
运行
复制
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()上下文中,上述错误状态意味着什么?

有人能帮我找出原因吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-03 13:06:06

您的代码错误地调用了GetLastError。只有在紧接先前的GetLastError API调用失败并且该API通过GetLastError返回状态信息时,才应该调用GetLastError

这里所讨论的API是ReadFile文档说:

返回值 如果函数成功,则返回值为非零(TRUE)。 如果函数失败,或正在异步完成,则返回值为零(FALSE)。要获得扩展的错误信息,请调用GetLastError函数。

换句话说,只有当ReadFile返回FALSE时,才必须调用它。

您的代码应该如下所示:

代码语言:javascript
运行
复制
if (!ReadFile(fp,destCharArray,ByesToRead,NoOfBytesRead,NULL))
{
    DWORD err = GetLastError();
    // handle error probably by raising exception
}

您的代码将返回与调用ReadFile无关的早期故障的错误代码。

票数 8
EN

Stack Overflow用户

发布于 2012-02-03 12:38:47

最后一个错误可能是调用CreateFile优先级造成的。如果为ERROR_ALREADY_EXISTS指定CREATE_ALWAYS或CREATE_NEW,则此函数将最后一个错误值设置为dwCreationDisposition。

重要的是要知道,任何函数都可以设置最后一个错误。您应该始终检查该函数的返回值,该值指示该函数是否失败。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9128693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档