在C#中通过CreationTime删除目录

时间:2013-08-07 12:15:16

标签: c# directory subdirectory

我有一个C#应用程序,其中要求删除创建日期早于今天日期的所有文件。我们怎样才能做到这一点?

我在谷歌搜索了一个示例代码。所以我决定创建一个并在此处发布。如果要从目录中删除旧文件,可以使用以下方法。如果您对此有任何疑问,请告诉我,我很乐意为您提供帮助。

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.");
                }

            }

这非常有用且易于使用。我已经尝试了上述方法。你们中的任何一个人都有另外一个想法,请与我分享。

2 个答案:

答案 0 :(得分:0)

如果你有窗户,forfiles可能就是你想要的。

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

答案 1 :(得分: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);
  }

这是基于对this question here的回答。

这是非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);
   }