Top / Programming / C++Builder / ファイルをゴミ箱に移動する

ファイルをゴミ箱に移動する

Win32APIの SHFileOperation を使用すると、ファイルをゴミ箱に移動できます。

C++Builder 2009以降の場合

プロジェクトオプションの「_TCHARのマップ先」を「wchar_t」に設定しています。

/**
 * ファイルをゴミ箱に移動する
 * @param FileName 移動するファイルのファイル名
 * @return 処理に成功したときはtrue
 */
bool MoveTrash(const UnicodeString& FileName)
{
  if (FileExists(FileName) == false) return false;

  //終端文字は\0\0
  const int pathSize = FileName.Length() + 2;
  wchar_t* from = new wchar_t[pathSize];
  wcscpy(from, FileName.c_str());
  from[pathSize-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_SILENT | FOF_NOCONFIRMATION | FOF_ALLOWUNDO;
  bool result = (SHFileOperation(&fs) == 0);
  delete[] from;
  return result;
}

#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
  bool result = MoveTrash(L"C:\test\test.txt");

C++Builder 2007以前の場合

/**
 * ファイルをゴミ箱に移動する
 * @param FileName 移動するファイルのファイル名
 * @return 処理に成功したときはtrue
 */
bool MoveTrash(const AnsiString FileName)
{
  if (FileExists(FileName) == false) return false;

  //終端文字は\0\0
  char* from = new char[FileName.Length() + 2];
  strcpy(from, FileName.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_SILENT | FOF_NOCONFIRMATION | FOF_ALLOWUNDO;
  bool result = (SHFileOperation(&fs) == 0);
  delete[] from;
  return result;
}

関連

更新履歴