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