Win32APIの SHFileOperation を使用すると、ファイルをゴミ箱に移動できます。
プロジェクトオプションの「_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");
/**
* ファイルをゴミ箱に移動する
* @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;
}