GetFileAttributes为不存在的文件返回FILE_ATTRIBUTE_ARCHIVE
GetFileAttributes returning FILE_ATTRIBUTE_ARCHIVE for nonexistent file
我在创建文件之前使用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上的问题有关为什么这个文件在试图删除时明显不存在?有些文件名是受保护的,即使该文件实际上不存在,或者从未存在过。
CON, PRN, AUX, CLOCK$, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 lptt1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9。
这些都是受保护的,如果你遇到在windows上编辑/创建/删除它们的情况,可能会导致问题。
相关文章:
- Seg Fault Issue C++ (file IO / getline)
- C++ variable_name.attribute = x
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- File.cpp.o:OpenPose 标志 CMakeFiles/.. 的多重定义/main.cpp.o:首先在这里定
- Visual Studio C++ Project File CustomBuild Task: Filter Outp
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- 可视化 如何在C++中将字符数组转换为 FILE 类型
- 如何在从文件中读取整数时使用 file.eof()?
- "No such file or directory" C++标头问题
- 使用 sftp_open() 使用 C++ 中的 SFTP libssh 将文件从本地复制到远程时,File 返回 N
- Visual Studio "fatal error LNK1104: cannot open file"未使用或包含的库
- 需要帮助调试"attribute parser"!C++ 来自黑客排名的问题
- typedef vector size_type in header file
- make 命令创建 .file,但不创建应用程序文件
- 为什么 VScode 在 .h 文件中显示"'iostream' file not found"?
- 我在 #include < bits/stdc++h.> 放置时出错"No such file or directory"
- 使用 编译时。RES File with MinGW G++, .无法识别 RES
- fopen 在创建大量文件后因 EFBIG "File too large" 而失败
- 叮叮当当。target_include_directories "No such file or directory"