3

假设我在一个文件夹中有 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 个大小相同的文件,我想删除这些文件并根据时间只将其中一个存储在文件夹中。我怎样才能做到这一点?

4

2 回答 2

2

您如何按大小(从小到大)然后按最后写入时间(从旧到最新)对文件进行排序,然后删除直到只剩下一个(最大的,或者如果所有大小都相同,则为最新的):

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;
        }
    }
}
于 2014-03-19T19:56:33.673 回答
0

我认为应该这样做。在删除当天的文件后重新捕获文件,并删除除最新文件之外的所有文件:

private void DeleteFiles() {
    var di = new DirectoryInfo("E:\\UploadFiles");
    var files = di.GetFiles().GroupBy(f => f.LastWriteTime.Date);

    foreach (var fileGrp in files) {
        DateTime currentDay = fileGrp.First().LastWriteTime.Date;
        var maxFile = fileGrp.Max(r => r.Length);
        foreach (FileInfo file in fileGrp.Where(r => r.Length < maxFile)) {
            file.Delete();
        }
        var filesCurrentDay = di.GetFiles()
             .Where(f => f.LastWriteTime.Date == currentDay.Date);
        var maxFileTime = fileGrp.Max(r => r.LastWriteTime.ToFileTimeUtc());
        foreach (FileInfo file in filesCurrentDay 
                   .Where(r => r.LastWriteTime.ToFileTimeUtc() < maxFileTime)) {
           file.Delete();
        }
    }
    protected void Button1_Click(object sender, EventArgs e) {
        this.DeleteFiles();
    }
}

上面固定为不按大小分组,最初有第二个按大小分组,您的要求不需要。

于 2014-03-18T16:03:16.223 回答