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 を超えるファイルを含むディレクトリがあり、パスを recusivly にフィードしています。常に 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 に答える