GetFileAttributesA返回“17”为一个现有的目录。 “16”表示这是一个目录,在文档中没有提到“17”

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'; }