/*-------------------------------------------------------------------------------/
関数名:BOOL DeleteDirectory(LPCTSTR lpPathName)
引 数:lpPathName 削除するディレクトリのパス名が入ったNULLで終わる文字列。
戻り値:関数が成功すると、0以外の値が返り、関数が失敗すると、0が返ります。
解 説:ディレクトリを丸ごと削除する。
/-------------------------------------------------------------------------------*/
BOOL DeleteDirectory(LPCTSTR lpPathName)
{
CFileFind fnd;
CString strPathName = lpPathName;
strPathName.TrimRight('\\');
strPathName += _T("\\*.*");
if(fnd.FindFile(strPathName, 0))
{
int i = 1;
while(i)
{
i = fnd.FindNextFile();
// ファイル名が"."か".."の場合は次を検索
if(fnd.IsDots())
continue;
// 削除するファイル名取得
// GetFilePath()にはバグがあり正確に取得できない場合があるので使わない
CString strDeleteFile = lpPathName;
strDeleteFile.TrimRight('\\');
strDeleteFile += _T("\\") + fnd.GetFileName();
// フォルダだった場合、再帰呼び出しでそのフォルダを削除
if(fnd.IsDirectory())
DeleteDirectory(strDeleteFile);
// ファイルの削除
else
::DeleteFile(strDeleteFile);
}
fnd.Close();
// フォルダの削除
return ::RemoveDirectory(lpPathName);
}
return FALSE;
}
|