ディレクトリの削除 (WinAPI/C++)

WinAPIのRemoveDirectoryは空のフォルダが削除できないので、中身のファイルおよびディレクトリを削除してからRemoveDirectoryを呼び出す必要があります。

とりあえず作ってみました。

BOOL _DeleteDirectory(LPCTSTR lpPathName)
{
BOOL bRet = TRUE;
TCHAR szDirPathName[_MAX_PATH] = {0};
TCHAR szFindFileName[_MAX_PATH] = {0};
TCHAR szFileName[_MAX_PATH] = {0};
_tcscpy(szDirPathName, lpPathName);
size_t length = _tcslen(szDirPathName);
if (length > 0)
{
if (szDirPathName[length-1] != _T('\\'))
_tcscat(szDirPathName, _T("\\"));
}
_tcscpy(szFindFileName, szDirPathName);
_tcscat(szFindFileName, _T("*"));
WIN32_FIND_DATA findData;
HANDLE hFile = FindFirstFile(szFindFileName, &findData);
if (hFile != INVALID_HANDLE_VALUE)
{
do
{
if (_tcscmp(findData.cFileName, _T(".")) != 0 && _tcscmp(findData.cFileName, _T("..")) != 0)
{
_tcscpy(szFileName, szDirPathName);
_tcscat(szFileName, findData.cFileName);
if ( findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
_DeleteDirectory(szFileName);
else
::DeleteFile(szFileName);
}
}
while ( ::FindNextFile(hFile, &findData) );
}
::FindClose(hFile);
bRet = ::RemoveDirectory(lpPathName);
return bRet;
}