gpt4 book ai didi

c++ - GetFileAttributes 为不存在的文件返回 FILE_ATTRIBUTE_ARCHIVE

转载 作者:行者123 更新时间:2023-11-28 06:10:44 28 4
gpt4 key购买 nike

我在创建文件之前使用 GetFileAttributes 检查是否存在,并向用户显示一个对话框(标准的“你想替换现有文件吗”)

if (GetFileAttributes(szFilePath) != 0xffffffff) { /* display "do you want to replace?"*/}

偶尔,它会为一个不可能可能存在的文件返回成功,因为它所在的文件夹被创建(使用CreateDirectory)。当它这样做时,它返回的属性只是 FILE_ATTRIBUTE_ARCHIVE。

知道发生了什么吗?

编辑:为了回应没完没了的“你应该改用 INVALID_FILE_ATTRIBUTES”系列,我已经这样做了。

DWORD dwFile = GetFileAttributes(szFilePath);
if (dwFile != INVALID_FILE_ATTRIBUTES) { /* display "do you want to replace?"*/}

我得到了相同的结果。对于不存在的文件,dwFile 作为 FILE_ATTRIBUTE_ARCHIVE 返回。我很确定它不存在。该文件夹刚刚创建。我没有使用 GetTempFileName()。我可以从调试器复制 szFilePath 并使用资源管理器和命令行访问该文件夹,它们都不会将文件显示为已存在。

最佳答案

好的,事实证明这是 DOS 的遗留问题。具体的文件名很重要。假设 c:\aux.c 在您的系统上不存在,并且您有一个“C”驱动器,下面的代码行将重现该问题。 (我最初遇到这种行为是在一棵树的深处,但这是一个很好的最小案例。)

DWORD dwFile = GetFileAttributes(TEXT("C:\\aux.c"));

这与 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。

这些都是 protected ,如果您遇到试图在 Windows 上编辑/创建/删除它们的情况,可能会导致问题。

关于c++ - GetFileAttributes 为不存在的文件返回 FILE_ATTRIBUTE_ARCHIVE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31329394/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com