[C#] フォルダ内でパターンに一致しないファイルを削除

C# におけるフォルダ内ファイルの列挙は GetFiles() メソッドが用意されていたが、これは探索に時間がかかってしまう場合があり効率が悪いものであった。
そこで .NET Framework 4 からは EnumerateFiles() メソッドが追加された。

ファイルやディレクトリの一覧を効率的に取得するには?[4以降、C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/1018enumfiles/enumfiles.html

パターンに一致するファイルはこれですぐに探せるのだが、例えば、パターンに一致しないファイルを消したい場合はもう一工夫する。
以下は D:\test 以下にある、本日日付以外のファイルをすべて削除する場合のサンプル。
var today = DateTime.Now.ToString("yyyy-MM-dd");
// .txt ファイルのみ削除対象にする場合は、EnumerateFiles の第二引数にパターンをセットする。
// foreach (var path in Directory.EnumerateFiles(@"D:\test", "*.txt").Where(x => !x.Contains(today)))
foreach (var path in Directory.EnumerateFiles(@"D:\test").Where(x => !x.Contains(today)))
{
   var fileInfo = new FileInfo(path);
   fileInfo.Delete();
}
Directory.EnumerateFiles メソッド - msdn
http://msdn.microsoft.com/ja-jp/library/vstudio/system.io.directory.enumeratefiles%28v=vs.100%29.aspx

このブログの人気の投稿

Excel で入力した文字に勝手に取り消し線が入る

コピーした行の挿入が表示されない時はフィルタされていないかチェック