1

以下のコードを使用して、10 日以上経過したファイルを削除しています。これを行うためのよりシンプルでスマートな方法はありますか?

string source_path = ConfigurationManager.AppSettings["source_path"];
            string filename= ConfigurationManager.AppSettings["filename"];

            var fileQuery= from file in Directory.GetFiles(source_path,filename,SearchOption.TopDirectoryOnly)
                           where File.GetCreationTime(file)<System.DateTime.Now.AddDays(-10)
                           select file;

            foreach(var f in fileQuery)
            {
                File.Delete(f);
            }
4

2 に答える 2

6

さて、私が変更したいことが2つあります。

  • 繰り返し再評価するのではなく、DateTime 一度にカットオフを決定するDateTime.Now
  • where句を取得したばかりの場合は、クエリ式を使用しません。

したがって、クエリ部分を次のように書き直します。

var cutoff = DateTime.Now.AddDays(-10);
var query = Directory.GetFiles(sourcePath, filename, SearchOption.TopDirectoryOnly)
                     .Where(f => File.GetCreationTime(f) < cutoff);

別の方法としてDirectoryInfo、 andを使用することもできFileInfoます。

var cutoff = DateTime.Now.AddDays(-10);
var path = new DirectoryInfo(sourcePath);
var query = path.GetFiles(filename, SearchOption.TopDirectoryOnly)
                .Where(fi => fi.CreationTime < cutoff);

(.NET 4では、EnumerateFiles代わりに使用することもできます。)

于 2012-06-12T16:43:45.307 に答える
-1

このプロセスを実行するために、LINQ の「ワンライナー」を実行できます。

Directory.GetFiles(source_path,filename,SearchOption.TopDirectoryOnly)
.Where(f => File.GetCreationTime(file) < System.DateTime.Now.AddDays(-10))
.All(f => {File.Delete(f); return true;);

コードを try キャッチでラップすることを忘れないでください。

于 2012-06-12T16:47:34.570 に答える