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秒按了回车键。这正是我们需要做的。呵呵,我讨厌和这么快的时间赛跑!