ファイル(フォルダー)をゴミ箱に移動する

Shell Object はファイル操作に欠くことのできない専用の Object Module です。
ゴミ箱に移動する処理は Shell Object を使った代表的な操作です。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. 新規プロジェクトで[空のプロジェクト](DustBox) を作成します。
  2. DustBox.cpp のソースコードです。
    shlobj.h をインクルードして下さい。
    /*******************************************************/
    /*★ ファイル(フォルダー)をゴミ箱に移動する    前田 稔 ★*/
    /*******************************************************/
    #include    <windows.h>
    #include    <shlobj.h>
    
    char    fname[24]= {  "C:\\TMP\\A.TXT"  };
    //char    fname[24]= {  "C:\\TMP\\work"  };
    
    //★ ファイル(フォルダー)をゴミ箱に移動する
    int DelFile(char *p_Path )
    {   SHFILEOPSTRUCT  fop;
    
        ZeroMemory(&fop,sizeof(SHFILEOPSTRUCT));
        fop.hwnd = NULL;
        fop.wFunc = FO_DELETE;
        fop.pFrom = p_Path;
        fop.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION;
        return SHFileOperation(&fop);
    }
    
    //★ Windows Main 関数
    int PASCAL  WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int nCmdShow)
    {
        if (DelFile(fname)==S_OK)
            MessageBox(NULL,fname,"File をゴミ箱に移動しました",MB_OK);
        else
            MessageBox(NULL,fname,"File をゴミ箱に移動できません",MB_OK);
        return 0;
    }
        
  3. プログラムを実行するとゴミ箱にファイル(フォルダー)が移動することを確認して下さい。
    ゴミ箱に移動するファイルやフォルダーはプログラムで参照中であってはいけません。
    他のプログラムで参照中で無いことはもちろんですが、FindClose() やカレントの解除に注意して下さい。

【演習】

  1. Dialog Box からフォルダー名やファイル名を入力して、ゴミ箱に移動するプログラムを作成して下さい。
  2. ファイル(フォルダー)は1バイトの \0 で区切って複数個指定できます。
    指定の終わりは2バイトの \0 を格納して下さい。
        char    fname[24]= {  "C:\\TMP\\A.TXT\0\0"  };
        //char    fname[24]= {  "C:\\TMP\\work\0\0"  };
        
  3. ファイル指定の終わりを設定するために、場合によっては DelFile() に次のコードを追加して下さい。
    p_Path[strlen(p_Path)+1]= '\0';

超初心者のプログラム入門(Win32API C++)