[c#] .NET을 사용하여 디렉토리에서 3 개월 이상 된 파일 삭제

3 개월 이상 된 특정 디렉터리의 파일을 삭제하는 방법을 알고 싶습니다 (C # 사용).하지만 날짜 기간이 유연 할 수 있다고 생각합니다.

명확하게 말하면, 90 일보다 오래된 파일을 찾고 있습니다. 즉, 90 일 이내에 생성 된 파일은 보관해야하고 다른 파일은 모두 삭제해야합니다.



답변

이런 식으로 할 수 있습니다.

using System.IO;

string[] files = Directory.GetFiles(dirName);

foreach (string file in files)
{
   FileInfo fi = new FileInfo(file);
   if (fi.LastAccessTime < DateTime.Now.AddMonths(-3))
      fi.Delete();
}


답변

다음은 1 줄짜리 람다입니다.

Directory.GetFiles(dirName)
         .Select(f => new FileInfo(f))
         .Where(f => f.LastAccessTime < DateTime.Now.AddMonths(-3))
         .ToList()
         .ForEach(f => f.Delete());


답변

LINQ를 과도하게 사용하려는 사람들을 위해.

(from f in new DirectoryInfo("C:/Temp").GetFiles()
 where f.CreationTime < DateTime.Now.Subtract(TimeSpan.FromDays(90))
 select f
).ToList()
    .ForEach(f => f.Delete());


답변

다음은 디렉토리에서 파일 생성 시간을 가져오고 3 개월 전에 생성 된 파일을 찾는 방법에 대한 스 니펫입니다 (정확히 90 일 전).

    DirectoryInfo source = new DirectoryInfo(sourceDirectoryPath);

    // Get info of each file into the directory
    foreach (FileInfo fi in source.GetFiles())
    {
        var creationTime = fi.CreationTime;

        if(creationTime < (DateTime.Now- new TimeSpan(90, 0, 0, 0)))
        {
            fi.Delete();
        }
    }


답변

System.IO.File 클래스 의 GetLastAccessTime 속성이 도움이 될 것입니다.


답변

기본적으로 Directory.Getfiles (Path)를 사용하여 모든 파일 목록을 가져올 수 있습니다. 그 후 목록을 반복하고 Keith가 제안한대로 GetLastAccessTim ()을 호출합니다.


답변

그런 것

            foreach (FileInfo file in new DirectoryInfo("SomeFolder").GetFiles().Where(p => p.CreationTime < DateTime.Now.AddDays(-90)).ToArray())
                File.Delete(file.FullName);