antenn-a
company profile

MFC航海日記 七日目(ごみ箱へファイルを移動する)

第3日目に挙げた問題の内ディレクトリ選択ダイアログは出せるようになったので次にファイルを削除してごみ箱へ移動させる方法を考えようと思う。まず、普通に消した場合はどうだろう・・・・だめだ・・・・ファイルは消えるがごみ箱には入っていない。このファイルは電子の屑になってしまった。
う〜ん。ごみ箱とは Windows95 から新しく導入された機能なので通常のやり方ではまずいのだろう。すると・・・APIか・・・・。新しく加わったAPIをいろいろな方法で調べてみる・・・・。すると、一つのAPI関数が目を引いた。その名は「SHFileOperation」というものな!ファイルオペレーション・・・・まさか!と思いそのヘルプを見てみる。どうやらこのAPI関数で出来そうである。このAPIは「SHFILEOPSTRUCT」なる構造体を引数で与えなければならない。あとはこの構造体に必要なデータを入れて渡すだけで出来るは ずである。心臓の音を聞きながらコンパイルする(そんなすごいことか?)・・・・・・できた!見事にごみ箱へファイルが移動した!やっぱり、成せば成るもんだ・・・・・
下にそのソースを記載する。

prev

void CRecycleTestDlg::OnRButtonDown
(UINT nFlags, CPoint point) 
{
    SHFILEOPSTRUCT FileOp;

    //確認のダイアログを表示するかどうかのフラグ
    FileOp.fFlags = FOF_ALLOWUNDO;

    FileOp.hwnd = NULL;
    FileOp.wFunc = FO_DELETE;
    FileOp.pFrom = "c:\\test.txt";
    FileOp.pTo = NULL;

    FileOp.hNameMappings = NULL;
    FileOp.lpszProgressTitle = NULL;
    SHFileOperation(&FileOp);
  
    CDialog::OnRButtonDown(nFlags, point);
}

prev

ちなみに FileOp.fFlags の部分を「TRUE」にセットすると、下のようなダイアログが出るようになる。 「FALSE」にセットさせているときは、何も言わずにごみ箱に直行するようになる。



ごみ箱へ移動させるサンプルソースはここからダウンロードできる。


antenn-a

prev next


antenn-a