首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetLastError() !=奇怪

GetLastError() !=奇怪
EN

Stack Overflow用户
提问于 2012-10-18 17:34:11
回答 2查看 515关注 0票数 0

作为我的C++项目的一部分,我使用了一个带有WinAPI文件管理函数的文件管理结构。在搜索临时文件名时,我有一个函数OpenNewTempFile(),它将生成一个名称,尝试通过调用结构中的另一个函数来打开它,简单地说就是OpenFile(),如果该文件已经存在,则使用不同的名称静默重试(并在循环时无限重试)。这是OpenFile(),如果不是作为临时文件打开,它应该只报告file -exists exists错误。

有人能解释一下为什么要执行if代码块吗?&&的第二部分不应该是真的。当块被击中时,你可以在下面的VS停靠中看到当前的变量,以及在上面的控制台窗口中GetLastError()返回了什么。这把我搞糊涂了。

编辑:根据建议,我将GetLastError存储在一个变量中。

...well,这只会引起更多的问题为什么现在是80?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-18 18:22:29

我认为问题在于Windows中有两个“文件已经存在”的代码。来自CreateFile文档:

CREATE_ALWAYS

始终创建新文件。

如果指定的文件存在并且是可写的,则该函数将覆盖该文件,该函数将成功,并将上一个错误代码设置为ERROR_ALREADY_EXISTS (183)

如果指定的文件不存在并且是有效路径,则创建一个新文件,函数成功,并将最后一个错误代码设置为零。

有关更多信息,请参阅本主题的“备注”部分。

CREATE_NEW

创建一个新文件,但前提是该文件尚不存在。

如果指定的文件存在,函数将失败,并将最后一个错误代码设置为ERROR_FILE_EXISTS (80)

如果指定的文件不存在,并且是可写位置的有效路径,则会创建一个新文件。

您使用了CREATE_NEW标志(正确地),所以应该可以看到80代码。

票数 1
EN

Stack Overflow用户

发布于 2012-10-18 18:14:21

为什么现在是80?

80表示“该文件存在”,如果AsTemp == trueAsTemp在您的情况下为true,则您正在尝试CREATE_NEW

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

https://stackoverflow.com/questions/12951508

复制
相关文章

相似问题

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