フォルダを削除するには、RemoveDir を使用します。
ディレクトリの削除が成功すると戻り値は true になり,エラーが発生すると false になります。
削除するフォルダの中身は、空でなければなりません。
Win32APIの SHFileOperation を使用すると、中身が空でないフォルダを削除できます。
プロジェクトオプションの「_TCHARのマップ先」を「wchar_t」に設定しています。
/**
* フォルダーを削除する
* @param Dir ディレクトリ名
* @return 成功したときはtrue
*/
bool DeleteDir(const UnicodeString& Dir)
{
//\で終わっていると削除できない
const UnicodeString targetDir = ExcludeTrailingPathDelimiter(Dir);
//終端文字は\0\0
const int pathSize = targetDir.Length() + 2;
wchar_t* buff = new wchar_t[pathSize]; //メモリーを確保
wcscpy(buff, targetDir.c_str());
buff[pathSize-1] = 0;
SHFILEOPSTRUCT fs;
ZeroMemory(&fs, sizeof(SHFILEOPSTRUCT));
fs.hwnd = Application->Handle;
fs.wFunc = FO_DELETE;
fs.pFrom = buff;
fs.pTo = NULL;
fs.fFlags=FOF_SIMPLEPROGRESS|FOF_NOCONFIRMATION;
bool result = (SHFileOperation(&fs) == 0);
delete[] buff;
return result;
}
int _tmain(int argc, _TCHAR* argv[])
{
bool result = DeleteDir(L"C:\test\");
/**
* フォルダーを削除する
* @param Dir ディレクトリ名
* @return 成功したときはtrue
*/
bool DeleteDir(AnsiString Dir)
{
//\で終わっていると削除できない
Dir = ExcludeTrailingPathDelimiter(Dir);
//終端文字は\0\0
char* from = new char[Dir.Length() + 2];
strcpy(from, Dir.c_str());
from[strlen(from) + 1] = 0;
SHFILEOPSTRUCT fs;
ZeroMemory(&fs, sizeof(SHFILEOPSTRUCT));
fs.hwnd = Application->Handle;
fs.wFunc = FO_DELETE;
fs.pFrom = from;
fs.pTo = NULL;
fs.fFlags=FOF_SIMPLEPROGRESS|FOF_NOCONFIRMATION;
bool result = (SHFileOperation(&fs) == 0);
delete[] from;
return result;
}