1
int main(void) 
{   

    HANDLE hFoundFile;
    WIN32_FIND_DATA foundFileData;

    SetCurrentDirectory(TEXT("C:\\"));

    hFoundFile = FindFirstFileEx(TEXT("*"),FINDEX_INFO_LEVELS::FindExInfoBasic,&foundFileData ,FINDEX_SEARCH_OPS::FindExSearchLimitToDirectories ,NULL , NULL);

    do
    {
        wprintf(TEXT("%s\n"),foundFileData.cFileName);

    }
    while(FindNextFile(hFoundFile,&foundFileData));

    system("Pause");
    return 0;
}

FINDEX_SEARCH_OPS::FindExSearchLimitToDirectoriesオプションが関数に明示的に渡されているにもかかわらず、「通常の」ファイルも出力するのはなぜですか?

4

1 に答える 1

1

Windows で C のディレクトリを再帰的にトラバースする方法

  • 注: フラグは 2001 年に追加されたため、それ以前のシステム (たとえば、Windows 2000、Samba の古いバージョンで構築された NAS デバイス) はフラグをサポートしません。– レイモンド・チェン

    WIN32_FIND_DATA FindFileData;
    do {
    
    if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    
    
    
    
    }
    while(FindNextFile(hFindFile, &FindFileData));
    

そしてあなたのコード内で:

int main(void) 
{   

    HANDLE hFoundFile;
    WIN32_FIND_DATA foundFileData;

    SetCurrentDirectory(TEXT("C:\\"));

    hFoundFile = FindFirstFileEx(TEXT("*"),FINDEX_INFO_LEVELS::FindExInfoBasic,&foundFileData ,FINDEX_SEARCH_OPS::FindExSearchLimitToDirectories ,NULL , NULL);

    do
    {
    if (foundFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        wprintf(TEXT("%s\n"),foundFileData.cFileName);

    }
    while(FindNextFile(hFoundFile,&foundFileData));

    system("Pause");
    return 0;
}
于 2012-09-08T14:16:12.703 に答える