ファイルやフォルダをプログラムで削除するために使用するWin32APIは何ですか?
編集
DeleteFile および RemoveDirectory は私が探していたものです。ただし、このプロジェクトでは、最終的に SHFileOperation を使用しました。 CodeGuruの サンプルコード が役に立ちました。
DeleteFile および RemoveDirectory が必要だと思います
これに取り組むには2つの方法があります。 1つは ファイルサービス ( DeleteFile や RemoveDirectory などのコマンドを使用)を介して、もう1つは Windowsシェル を介して行われます。 =( SHFileOperation を使用)。空でないディレクトリを削除する場合、またはエクスプローラースタイルのフィードバック(フライングファイルを使用した進行状況ダイアログなど)が必要な場合は、後者をお勧めします。これを行う最も簡単な方法は、 [〜#〜] shfileopstruct [〜#〜] を作成し、それを初期化して SHFileOperation を呼び出すことです。
void silently_remove_directory(LPCTSTR dir) // Fully qualified name of the directory being deleted, without trailing backslash
{
SHFILEOPSTRUCT file_op = {
NULL,
FO_DELETE,
dir,
"",
FOF_NOCONFIRMATION |
FOF_NOERRORUI |
FOF_SILENT,
false,
0,
"" };
SHFileOperation(&file_op);
}
これにより、ディレクトリ全体がサイレントに削除されます。 SHFILEOPSTRUCTの初期化を変更することで、フィードバックとプロンプトを追加できます。よく読んでください。
上記のuvgroovyのコメントを参照してください。 'dir'フィールドの最後に2つのnullが必要です。
int silently_remove_directory(LPCTSTR dir) // Fully qualified name of the directory being deleted, without trailing backslash
{
int len = strlen(dir) + 2; // required to set 2 nulls at end of argument to SHFileOperation.
char* tempdir = (char*) malloc(len);
memset(tempdir,0,len);
strcpy(tempdir,dir);
SHFILEOPSTRUCT file_op = {
NULL,
FO_DELETE,
tempdir,
"",
FOF_NOCONFIRMATION |
FOF_NOERRORUI |
FOF_SILENT,
false,
0,
"" };
int ret = SHFileOperation(&file_op);
free(tempdir);
return ret; // returns 0 on success, non zero on failure.
}
DeleteFile
はファイルをごみ箱に送信しないと思います。また、RemoveDirectory
は空のdirのみを削除します。 SHFileOperation は、何をどのように削除するかを最も細かく制御でき、必要に応じて標準のWindows UIダイアログボックス(「削除の準備など」など)を表示します。
/* function used to send files and folder to recycle bin in win32 */
int fn_Send_Item_To_RecycleBin(TCHAR newpath[])
{
_tcscat_s(newpath, MAX_PATH,_T("|"));
TCHAR* Lastptr = _tcsrchr(newpath, _T('|'));
*Lastptr = _T('\0'); // Replace last pointer with Null for double null termination
SHFILEOPSTRUCT shFileStruct;
ZeroMemory(&shFileStruct,sizeof(shFileStruct));
shFileStruct.hwnd=NULL;
shFileStruct.wFunc= FO_DELETE;
shFileStruct.pFrom= newpath;
shFileStruct.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT;
return SHFileOperation(&shFileStruct);
}
C++プログラミングの場合、サードパーティのライブラリを使用する場合は、 boost :: filesystem :: remove_all(yourPath) はSHFileOperationよりもはるかに簡単です。