Windows 7 64位,与mingw编译。 我试图testing一个给定的path是否在Windows标题中使用GetFileAttributesA目录。 某个目录的常量是16.由于某种原因,它返回了17.我的代码如下所示:
#include <iostream> #include <windows.h> void dir_exists(std::string dir_path) { DWORD f_attrib = GetFileAttributesA(dir_path.c_str()); std::cout << "Current: " << f_attrib << std::endl << "Wanted: " << FILE_ATTRIBUTE_DIRECTORY << std::endl; } int main() { dir_exists("C:\\Users\\"); return 0; }
当我运行这个时,输出是:
Current: 17 Wanted: 16
当前应该在这里返回16。 正如我在这个话题中所说的,我甚至都没有提到文件中的含义。
GetFileAttributes
返回一个位掩码,其有效值在这里列出: File Attribute Constants 。
17 == 0x11,这意味着返回值是
FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_DIRECTORY
FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_DIRECTORY
。
如果您只想检测您的路径是否指向某个目录,请使用FILE_ATTRIBUTE_DIRECTORY
屏蔽返回值并查看它是否非零:
#include <string> #include <iostream> #include <windows.h> bool dir_exists(std::string const& dir_path) { DWORD const f_attrib = GetFileAttributesA(dir_path.c_str()); return f_attrib != INVALID_FILE_ATTRIBUTES && (f_attrib & FILE_ATTRIBUTE_DIRECTORY); } int main() { std::cout << dir_exists("C:\\Users\\") << '\n'; }