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

C# 通过从文件夹名称中标识来删除最旧的文件夹,c#,C#,我的文件夹名称示例如下: abc.300520111500 abc.310520111500 abc.310520111515 正如您所看到的,这些文件夹由日期时间戳备份 原始文件夹: abc 备份文件夹: abc.ddmmyyyyhmm 我当前的代码如下所示: var files = Directory.GetDirectories(path, "abc.*"); foreach(var file in files) Console.WriteLine(file); foreach(var

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

abc.300520111500
abc.310520111500
abc.310520111515
正如您所看到的,这些文件夹由日期时间戳备份

原始文件夹:
abc

备份文件夹:
abc.ddmmyyyyhmm

我当前的代码如下所示:

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.02062011500
其中02062011500是现在最小的文件夹编号

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


有人知道如何解决这个问题吗?

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

您可以从文件夹列表中拆分datetime部分,并创建一个无序列表。然后按datetime排序。像这样的

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

+1我正要提供完全相同的答案,你一定比我早30秒按了回车键。这正是我们需要做的。呵呵,我讨厌和这么快的时间赛跑!