//ファイル列挙
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