我在创建文件之前使用GetFileAttributes来检查是否存在,并向用户显示一个对话框(标准"你想替换现有文件")
if (GetFileAttributes(szFilePath) != 0xffffffff) { /* display "do you want to replace?"*/}
有时,它会为无法可能存在的文件返回成功,因为它所在的文件夹只是已创建(使用CreateDirectory)。如果是这样,它返回的属性就是FILE_ATTRIBUTE_ARCHIVE。
知道发生了什么事吗?
编辑:响应无休止的系列"你应该使用INVALID_FILE_ATTRIBUTES而不是#34;我已经这样做了。
DWORD dwFile = GetFileAttributes(szFilePath);
if (dwFile != INVALID_FILE_ATTRIBUTES) { /* display "do you want to replace?"*/}
我得到了相同的结果。对于不存在的文件,dwFile作为FILE_ATTRIBUTE_ARCHIVE返回。我很确定它不存在。该文件夹刚刚创建。我没有使用GetTempFileName()。我可以从调试器复制szFilePath并使用资源管理器和命令行访问该文件夹,它们都没有显示该文件是否存在。
答案 0 :(得分:1)
好的,事实证明这是DOS的延续。特定文件名很重要。 以下代码行将重现该问题,假设您的系统上不存在c:\ aux.c,并且您有一个' C'驾驶。 (我最初遇到的行为是在一棵树深处,但这是一个很好的极小情况。)
ISBN: 0789721813 title: Red Hat Linux author: Hellums, Duane
它与SuperUser上的这个问题有关 Why does this file apparently not exist when attempting to delete it? 有些文件名受到保护,即使文件实际上并不存在,也从未存在过。
CON,PRN, AUX ,CLOCK $,NUL,COM1,COM2,COM3,COM4,COM5,COM6,COM7,COM8,COM9 LPT1,LPT2,LPT3,LPT4,LPT5,LPT6, LPT7,LPT8和LPT9。
这些都受到保护,如果您遇到试图在Windows上编辑/创建/删除它们的情况,可能会导致问题。