Top / Programming / C++Builder / ディレクトリ(フォルダ)を削除する

ディレクトリ(フォルダ)を削除する

SysUtils::RemoveDir

フォルダを削除するには、RemoveDir を使用します。

ディレクトリの削除が成功すると戻り値は true になり,エラーが発生すると false になります。

削除するフォルダの中身は、空でなければなりません。

SHFileOperation

Win32APIの SHFileOperation を使用すると、中身が空でないフォルダを削除できます。

C++Builder 2009以降の場合

プロジェクトオプションの「_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\");

C++Builder 2007以前の場合

/**
 * フォルダーを削除する
 * @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;
}

関連

更新履歴