C++Windows下遞迴遍歷多級目錄
阿新 • • 發佈:2019-02-15
#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目錄:
輸出結果: