3

Windows 7 64 位,使用 mingw 编译。我正在尝试测试给定路径是否是在 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,这里。正如我在主题中所说,我什至在文档中找不到任何提及 17 的含义。

4

1 回答 1

11

GetFileAttributes返回一个位掩码,其有效值在此处列出:文件属性常量

17 == 0x11,这意味着返回值为
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';
}
于 2012-10-24T22:40:25.517 回答