通过从文件夹名称中识别来删除最旧的文件夹

时间:2011-06-07 05:45:10

标签: c#

我的文件夹名称示例如下:

abc.300520111500
abc.310520111500
abc.310520111515

正如您所见,这些文件夹由日期时间戳备份。

原始文件夹: abc

备份文件夹: abc.ddMMyyyyhhmm

我目前的代码如下:

var files = Directory.GetDirectories(path, "abc.*");
foreach(var file in files)
Console.WriteLine(file);
foreach(var file in files.OrderByDescending(x=>x).Skip(int.Parse(args[0])))
Console.WriteLine(file);
foreach(var file in files.OrderByDescending(x=>x).Skip(int.Parse(args[0])))
Directory.Delete(file, true);

其中args [0]将标识要跳转到的文件夹数。此代码将始终删除最小的文件夹编号。

然而,我最近遇到了一个问题,那就是我们月份有变化。例如:

abc.020620111500其中020620111500是现在最小的文件夹编号。

因此,abc.020620111500将始终被删除,而不是abc.300520111500

任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果您无法将目录名称更改为YYYYMMDD,这将始终产生您想要的结果,您可以尝试操作/解析文件名字符串(可能转换为日期以进行比较),然后重建要删除的目录名称

答案 1 :(得分:1)

您可以从文件夹列表中拆分日期时间部分并使用无序列表。然后按日期时间对它们进行排序。像这样......

var orderedList =
    (from p in unorderedList
     let value = DateTime.Parse(p.Details.Find(s => s.Name == sortColumn).Value)
     orderby value
     select p)
     .ToList();