2014年12月03日

C#で指定されたフォルダ以下のファイルをゴミ箱へ

   このエントリーをはてなブックマークに追加 Clip to Evernote
どう書く?orgに感謝を込めて」シリーズ その53

■問題 (出題者:にしお さん)
指定したフォルダ以下にある、ファイル名が"~"で終わるファイルを削除するプログラムを作ってください。 指定したフォルダの中にあるフォルダのさらに中にあるファイルも削除の対象です。

今回は、シリーズ53回目にちなんで、ごみ箱に関する問題を取り上げます(^^;;
問題文から判断すると、普通にファイルの削除をすればOKそうな問題ですが、せっかくなので ゴミ箱へ移動するコードとしてみました。

以下のようなクラスを書きました。
Microsoft.VisualBasicアセンブリを参照に加えています。
このアセンブリのなかの、FileSystem.DeleteFile メソッドを使えば、簡単にゴミ箱への移動ができます。
作成したCleanメソッドの第3引数は省略可能です。
RecycleOption.DeletePermanentlyを指定すれば、ゴミ箱への移動ではなく、削除することができます。
ちなみに、再帰処理を書くのが面倒なので、Directory.GetFiles をつかって、指定フォルダ以下のすべてのファイルを求めています。

using System;
using System.IO;
using Microsoft.VisualBasic.FileIO;
using System.Linq;

namespace Doukaku.Org {

    public static class FileCleaner {
        public static void Clean(string dir, Func<string,bool> filter,
                                 RecycleOption option = RecycleOption.SendToRecycleBin) {
            var files = Directory.GetFiles(dir, "*", System.IO.SearchOption.AllDirectories);
            foreach (var filepath in files) {
                if (filter(filepath) == true)
                    FileSystem.DeleteFile(filepath, UIOption.OnlyErrorDialogs, option);
            }
        }
    }
}

使うときには、こんな風に書きます。

FileCleaner.Clean("C:\\TEMP", s => s.Last() == '~');



 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52386152