假设我在一个文件夹中有 4 个文件。昨天的 2 个文件(第一个文件 - 1 mb,第二个文件 - 2mb)和今天的 2 个文件(第一个文件 - 5 mb,第二个文件 - 10 mb)。
首先,我想检查每个文件的日期,根据日期,最小大小的文件将从文件夹中删除。
在我的代码中,我删除了所有最小大小的文件,但我想删除每天最小大小的文件。
这是我的代码:
private void DeleteFiles()
{
var di = new DirectoryInfo("E:\\UploadFiles");
var files = di.GetFiles().GroupBy(f => f.LastWriteTime.Date);
foreach (var fileGrp in files)
{
var maxFile = fileGrp.Max(r => r.Length);
foreach (FileInfo file in fileGrp.Where(r => r.Length < maxFile))
{
file.Delete();
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
this.DeleteFiles();
}
此代码运行良好,首先我根据日期对文件进行分组,然后删除除最大文件之外的所有文件。现在我想要的是如果同一日期有 4 个相同大小的文件,我想删除这些文件并根据时间只将其中一个存储在文件夹中。我该怎么做?
最佳答案
你如何只按大小(从最小到最大)然后按最后写入时间(从旧到最新)对文件进行排序,然后删除直到只剩下一个(最大的,或者如果所有大小都相同,则最新):
private void DeleteFiles()
{
var di = new DirectoryInfo("E:\\UploadFiles");
var files = di.GetFiles().GroupBy(f => f.LastWriteTime.Date);
foreach (var fileGrp in files)
{
int fileCount = fileGrp.Count();
foreach (FileInfo f in fileGrp.OrderBy(a => a.Length).ThenBy(a => a.LastWriteTime))
{
if (fileCount > 1)
{
f.Delete();
fileCount--;
}
else break;
}
}
}
关于asp.net - 如何根据大小和日期从文件夹中删除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15966286/