【发布时间】:2016-01-06 15:56:29
【问题描述】:
我有一个包含许多不同文件名的文件夹,格式为 (filename.extension.indexnumber) 我想保留每个文件名的 3 个最新文件并删除其余文件。这是我用来编译文件列表的代码。
string dir = Convert.ToString(folderBrowserDialog1.SelectedPath);
DirectoryInfo di = new DirectoryInfo(dir);
int asm = comboBox1.SelectedIndex + 1;
int prt = comboBox2.SelectedIndex + 1;
int drw = comboBox3.SelectedIndex + 1;
var assembliesToBeDeleted = (from a in di.GetFiles("*.asm.*", SearchOption.TopDirectoryOnly)
orderby a.LastWriteTime descending, a.Name ascending
select a).ToArray();
foreach (var assembly in assembliesToBeDeleted)
{
//assembly.Delete();
}
我最终得到的列表如下所示:
scumbox_ga.asm.338
scumbox_ga.asm.337
manway_nozzle.asm.3
inputcheck.asm.452
inputcheck.asm.451
inputcheck.asm.450
inputcheck.asm.449
inputcheck.asm.448
inputcheck.asm.447
cover_w_holes.asm.10
cls_halftank.asm.426
cls_halftank.asm.425
cls_half_final.asm.423
cls_half_final.asm.422
cls_half_final.asm.421
cls_half_final.asm.420
cls_half_final.asm.419
cls_half_final.asm.418
cls_half_final.asm.417
cls_half_final.asm.416
cls_half_final.asm.415
cls_half_final.asm.414
cls_half_final.asm.413
cls_half_final.asm.412
cls_half_final.asm.411
cls_half_final.asm.410
cls_half_final.asm.409
我希望这可以澄清问题。
【问题讨论】:
-
I want to keep the 3 newest files of each filename这对于基于 Windows 的系统没有意义吗?你能改写一下这个问题吗? -
我们是否可以假设以“004”结尾的文件比以“003”结尾的文件(具有相同的基本名称)最新?
-
我过去所做的是将最新的文件保留为基本文件,我还制作了一个副本,并在文件名上附加了时间戳。当我想清理文件时,我会使用它来确定保留数据的时间。这和你问的有点不同,但也许它会给你一个想法。
-
最好等待OP的澄清。如果此说明附有要删除而不是要删除的文件的示例,那就更好了。
-
当您将新文件另存为备份类型时,程序会分配最终索引号。变量“assembliesToBeDeleted”是包含所有文件的列表。例如,我的数组中有以下文件(1.asm.1、1.asm.2、1.asm.3、1.asm.4、2.asm.7、2.asm.8、 2.asm.9、2.asm10)。最高索引号将是每个基本文件名的最新文件。
标签: c# file-management