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

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

...well,这只会引起更多的问题为什么现在是80?
发布于 2012-10-18 18:22:29
我认为问题在于Windows中有两个“文件已经存在”的代码。来自CreateFile文档:
CREATE_ALWAYS
始终创建新文件。
如果指定的文件存在并且是可写的,则该函数将覆盖该文件,该函数将成功,并将上一个错误代码设置为ERROR_ALREADY_EXISTS (183)。
如果指定的文件不存在并且是有效路径,则创建一个新文件,函数成功,并将最后一个错误代码设置为零。
有关更多信息,请参阅本主题的“备注”部分。
CREATE_NEW
创建一个新文件,但前提是该文件尚不存在。
如果指定的文件存在,函数将失败,并将最后一个错误代码设置为ERROR_FILE_EXISTS (80)。
如果指定的文件不存在,并且是可写位置的有效路径,则会创建一个新文件。
您使用了CREATE_NEW标志(正确地),所以应该可以看到80代码。
发布于 2012-10-18 18:14:21
为什么现在是80?
80表示“该文件存在”,如果AsTemp == true和AsTemp在您的情况下为true,则您正在尝试CREATE_NEW。
https://stackoverflow.com/questions/12951508
复制相似问题