ファイル列挙

//ファイル列挙

typedef bool (*FILEENUMPROC)(LPCTSTR, LPWIN32_FIND_DATA, void*);

bool procFiles(LPCTSTR dir, FILEENUMPROC proc, void* param)
{
CString search;
search.Format(_T("%s\\*"), dir);

WIN32_FIND_DATA data;
HANDLE hFile = ::FindFirstFile(search, &data);
if(hFile == INVALID_HANDLE_VALUE) return false;

do{
if(lstrcmp(data.cFileName, _T(".") ) == 0) continue;
if(lstrcmp(data.cFileName, _T("..")) == 0) continue;

if(!(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
if(!(*proc)(dir, &data, param)) return false;
}

}while(::FindNextFile(hFile, &data));

::FindClose(hFile);

return true;
}



// ファイル列挙 (再帰)
bool procFilesRecursion(LPCTSTR dir, FILEENUMPROC proc, void* param)
{
CString path2;
path2.Format(_T("%s\\*"), dir);

WIN32_FIND_DATA data;

HANDLE hFile = ::FindFirstFile(path2, &data);
if(hFile == INVALID_HANDLE_VALUE) return false;

do{
if(lstrcmp(data.cFileName, _T(".") ) == 0 ) continue;
if(lstrcmp(data.cFileName, _T("..")) == 0 ) continue;

if(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
CString sub_dir;
sub_dir.Format(_T("%s\\%s"), dir, data.cFileName);

// 再帰
procFilesRecursion(sub_dir, proc, param);
}
else
{
if(!(*proc)(dir, &data, param)) return false;
}
}while(::FindNextFile(hFile, &data));

::FindClose(hFile);

return true;
}
最終更新:2012年02月15日 14:06
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。