基準フォルダ以下の全フォルダにアクセス

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:\ など) を与えると、各ドライブの全フォルダにアクセスする。
ドライブ列挙と組合わせると全ドライブが可能。


VC覚書きページ...