基準フォルダ以下の全フォルダにアクセス
void GetAllFolder(LPCTSTR szPath) { HANDLE hFind; WIN32_FIND_DATA wfd; TCHAR szWork[_MAX_PATH]; lstrcpy(szWork, szPath); lstrcat(szWork, _T("*.*")); hFind = ::FindFirstFile(szWork, &wfd); if (INVALID_HANDLE_VALUE != hFind) { do { if (FILE_ATTRIBUTE_DIRECTORY & wfd.dwFileAttributes) { // . はカレント、..は親なので処理しない if ((0 != lstrcmpi(wfd.cFileName, _T(".")))&&(0 != lstrcmpi(wfd.cFileName, _T("..")))) { lstrcpy(szWork, szPath); lstrcat(szWork, wfd.cFileName); if ('\\' != szWork[lstrlen(szWork)-1]) lstrcat(szWork, _T("\\")); GetAllFolder(szWork); // 再帰呼出し } } else { // フォルダに存在するファイルにアクセス } }while(::FindNextFile(hFind, &wfd)); ::FindClose(hFind); } }
szPath に基準フォルダを与える。
各ドライブルート(C:\, D:\ など) を与えると、各ドライブの全フォルダにアクセスする。
ドライブ列挙と組合わせると全ドライブが可能。