1

作成された日付が今日の日付よりも古いすべてのファイルを削除する必要がある C# アプリケーションがあります。どうすればこれを達成できますか?

サンプルコードを見つけるためにGoogleで検索しました。ディレクトリから古いファイルを削除したい場合は、以下の方法を使用できます。ご不明な点がございましたら、お気軽にお問い合わせください。喜んでお手伝いさせていただきます。

public void FolderDelete()
            {

                DirectoryInfo d = new DirectoryInfo(ConfigurationManager.AppSettings["<path>"]);
                if (d.Exists)
                {
                  //Get all Directories from the path
                  string[] folders = Directory.GetDirectories(d.ToString());
                    foreach (var item in folders)
                    {
                        DirectoryInfo info = new DirectoryInfo(item);
                        //It will purge the 14 days older directories 
                        if (info.CreationTime < DateTime.Now.AddDays(-14))
                        {
                            info.Delete(true);
                        }
                    }
                }


                else
                {
                    Console.WriteLine("There is no 14 days older files.");
                }

            }

これは非常に便利で使いやすいです。私は上記の方法を試しました。他のアイデアがあれば教えてください。

4

2 に答える 2

0

ウィンドウがある場合は、forfilesが必要な場合があります。

http://technet.microsoft.com/en-us/library/cc753551(WS.10).aspx

于 2013-08-07T12:18:31.823 に答える
0

これを行うLinqの方法を見つけました...

  DirectoryInfo d = new DirectoryInfo(ConfigurationManager.AppSettings["<path>"]);

  List<string> recentDirectories = d.GetDirectories()
                                        .Select(x => x.EnumerateDirectories()
                                                    .OrderByDescending(f => DateTime.Now.AddDays(-14))
                                                    .FirstOrDefault())
                                        .Where(x => x != null)
                                        .Select(x => x.FullName)
                                        .ToList();

  foreach (string dir in recentDirectories)
  {
      Directory.Delete(dir);
  }

これは、こちらの質問への回答に基づいています。

同等のことを行う非Linqの方法は次のとおりです。

   DirectoryInfo[] testDirs = d.GetDirectories();
   List<DirectoryInfo> dirInfos = d.EnumerateDirectories().ToList();
   IOrderedEnumerable<DirectoryInfo> infos = dirInfos.OrderByDescending(f => DateTime.Now.AddDays(-14));
   dirInfos = infos.ToList();

   foreach (DirectoryInfo dir in dirInfos)
   {
       Directory.Delete(dir.FullName);
   }
于 2014-02-13T16:49:04.013 に答える