您的位置:首页 > 编程语言 > C语言/C++

C++Windows下递归遍历多级目录

2015-10-19 17:15 447 查看
#include <tchar.h>
#include <Windows.h>
#include <Shlwapi.h>
#pragma comment( lib, "Shlwapi.lib" )
#include <strsafe.h>

bool ForeachFileByDirectory( LPCTSTR pDirectory )
{
    if( NULL == pDirectory )
    {
        return false;
    }
    
    //不存在的路径
    if( FALSE == PathFileExists( pDirectory ) )
    {
        return false;
    }

    //遍历所有类型文件
    WIN32_FIND_DATA FindData;
    TCHAR Directory[ MAX_PATH ];
    StringCbPrintf( Directory, sizeof( Directory ), TEXT( "%s\\*.*" ), pDirectory );

    //找到当前目录第一个句柄
    HANDLE hFile = FindFirstFile( Directory, &FindData );
    if( INVALID_HANDLE_VALUE == hFile )
    {
        return false;
    }

    TCHAR FullDirectory[ MAX_PATH ];
    do
    {
        //过滤打开文件夹符号
        if( TEXT( '.' ) == FindData.cFileName[ 0 ] )
        {
            continue;
        }

        //得到当前遍历的完整路径
        StringCbPrintf( FullDirectory, sizeof( FullDirectory ), TEXT( "%s\\%s" ), pDirectory, FindData.cFileName );

        //找到一个文件
        if( 0 == ( FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) )
        {
            _tprintf( TEXT( "find file: %s size:%d bytes.\n" ), FullDirectory, FindData.nFileSizeLow );
        }
        //否则找到一个文件夹
        else
        {
            _tprintf( TEXT( "find directory: %s.\n" ), FullDirectory );
            //继续递归这个文件夹
            if( false == ForeachFileByDirectory( FullDirectory ) )
            {
                return false;
            }
        }
    }
    while( FALSE != FindNextFile( hFile, &FindData ) );
    //检查退出循环条件是否是没有文件了否则出错
    if( ERROR_NO_MORE_FILES != GetLastError() )
    {
        return false;
    }
    FindClose( hFile );
    hFile = NULL;
    return true;
}
int main()
{
    //遍历当前工作路径下ok目录下所有文件和文件夹
    bool b = ForeachFileByDirectory( TEXT( ".\\ok" ) );
    return 0;
}

ok目录:



输出结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息