0

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

GetLastError() 异常

有人可以解释为什么该if块正在执行吗?第二部分不&&应该是真的。当块被击中时,您可以在下面的 VS Dock 中看到当前变量,以及GetLastError()在上面的控制台窗口中返回的内容。这让我感到困惑。

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

使用存储的 GetLastError() 捕捉

...嗯,这只会引发更多问题。为什么现在是80?

4

2 回答 2

1

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

CREATE_ALWAYS

总是创建一个新文件。

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

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

有关详细信息,请参阅本主题的备注部分。

创建新的

仅当它不存在时才创建一个新文件。

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

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

您使用了CREATE_NEW标志(正确),因此您应该期望 80 代码出现。

于 2012-10-18T10:22:28.697 回答
0

为什么现在是80?

80 表示“文件存在”,您正在尝试CREATE_NEW如果AsTemp == true并且AsTemptrue您的情况下。

于 2012-10-18T10:14:20.557 回答