1

我有一个 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.");
                }

            }

这非常有用且易于使用。我已经尝试了上述方法。你们有没有其他想法,请与我分享。

4

2 回答 2

0

如果你有 Windows,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 回答