0

Windows 编程新手,互联网上有几个我要问的例子,但没有一个显示我认为失败的比较。

我在整个 C++ 程序中使用了几个 windows api 调用,只需要一些关于如何正确使用它们的指导。

例如下面我有 GetFileAttributes() 它从文件属性常量返回任何东西。

DWORD dwAttributes = GetFileAttributes(strPathOfFile.c_str());
if ( dwAttributes != 0xffffffff )
{
    if ( dwAttributes == FILE_ATTRIBUTE_NORMAL )
    {
        pkFileInfoList->Add( strPathOfFile + "\t" +"FILE_ATTRIBUTE_NORMAL");
    }
    else if ( dwAttributes == FILE_ATTRIBUTE_ARCHIVE )
    {
        pkFileInfoList->Add( strPathOfFile + "\t" + "FILE_ATTRIBUTE_ARCHIVE");
    }
}

[/代码]

if/else 语句继续使用文件属性常量中的所有内容。

我是否正确使用了这个,我有一个包含超过 2500 个文件的目录,我正在反复提供路径。它总是返回 FILE_ATTRIBUTE_ARCHIVE。

谢谢,

4

1 回答 1

4

GetFileAttributes返回一组属性,而不是单个属性,因此要正确测试,您应该这样做:

DWORD dwAttributes = GetFileAttributes(strPathOfFile.c_str());
if ( dwAttributes != 0xffffffff )
{
    if ( dwAttributes & FILE_ATTRIBUTE_NORMAL )
    {
        pkFileInfoList->Add( strPathOfFile + "\t" +"FILE_ATTRIBUTE_NORMAL");
    }
    else if ( dwAttributes & FILE_ATTRIBUTE_ARCHIVE )
    {
        pkFileInfoList->Add( strPathOfFile + "\t" + "FILE_ATTRIBUTE_ARCHIVE");
    }
}

即使用按位 & 代替 ==

于 2013-03-22T11:06:29.270 回答