3

フォルダーに 4 つのファイルがあるとします。昨日の 2 つのファイル (1 番目のファイル - 1 mb、2 番目のファイル - 2 mb) と、今日の 2 つのファイル (1 番目のファイル - 5 mb、2 番目のファイル - 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 つある場合、それらのファイルを削除し、そのうちの 1 つだけを時間に応じてフォルダーに保存することです。どうやってやるの?

4

2 に答える 2

2

ファイルをサイズ (最小から最大) で並べ替え、最後に書き込み時刻 (古いものから新しいものへ) で並べ替え、1 つだけが残るまで削除します (最大のファイル、またはすべてのサイズが同じ場合は最新のファイル)。

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 に答える