作为我的C ++项目的一部分,我正在使用带有WinAPI文件管理功能的文件管理结构。
在搜索临时文件名时,我有一个函数OpenNewTempFile()
,它将生成一个名称,尝试通过调用结构中的另一个函数来打开它,只需OpenFile()
,如果该文件已存在,则重试静默地使用不同的名称(并且无限循环)。
这是OpenFile()
,如果它没有作为临时文件打开,它应该只报告已存在的文件错误。
有人能解释为什么if
块正在执行吗? &&
的第二部分不应该是真的。
当块被命中时,您可以在下面的VS停靠栏中看到当前变量,以及上面控制台窗口中返回的GetLastError()
。这让我感到困惑。
编辑: 由于建议,我已将GetLastError存储在变量中。
......好吧,这只会引发更多问题。为什么现在是80?
答案 0 :(得分:1)
我认为问题是Windows中有两个“已存在的文件”代码。来自CreateFile文档:
CREATE_ALWAYS
始终创建新文件。
如果指定的文件存在且可写,则该函数将被覆盖 文件,函数成功,最后错误代码设置为 ERROR_ALREADY_EXISTS(183)。
如果指定的文件不存在且是有效路径,则为新文件 创建,函数成功,最后一个错误代码设置为 零。
有关详细信息,请参阅本主题的“备注”部分。
CREATE_NEW
仅当新文件尚不存在时才创建新文件。
如果指定的文件存在,则函数失败并返回last-error 代码设置为 ERROR_FILE_EXISTS(80)。
如果指定的文件不存在并且是可写入的有效路径 location,创建一个新文件。
你使用CREATE_NEW
标志(正确),所以你应该期望显示80个代码。
答案 1 :(得分:0)
为什么现在是80?
80表示“文件存在”,如果您的CREATE_NEW
AsTemp == true
AsTemp
为true
,则表示您{{1}}。