A abordagem mais canônica quando se deseja excluir arquivos em um determinado período é usar o LastWriteTime do arquivo (última vez que o arquivo foi modificado):
Directory.GetFiles(dirName)
.Select(f => new FileInfo(f))
.Where(f => f.LastWriteTime < DateTime.Now.AddMonths(-3))
.ToList()
.ForEach(f => f.Delete());
(O texto acima é baseado na resposta de Uri, mas com LastWriteTime
.)
Sempre que você ouvir pessoas falando sobre excluir arquivos mais antigos que um determinado período de tempo (o que é uma atividade bastante comum), fazê-lo com base no LastModifiedTime do arquivo é quase sempre o que eles estão procurando.
Como alternativa, em circunstâncias muito incomuns, você pode usar o abaixo, mas use-os com cuidado, pois eles vêm com advertências.
CreationTime
.Where(f => f.CreationTime < DateTime.Now.AddMonths(-3))
A hora em que o arquivo foi criado no local atual. Porém, tome cuidado se o arquivo foi copiado, será a hora em que foi copiado e CreationTime
será mais recente que o do arquivo LastWriteTime
.
LastAccessTime
.Where(f => f.LastAccessTime < DateTime.Now.AddMonths(-3))
Se quiser excluir os arquivos com base na última vez em que foram lidos, você pode usar isso, mas não há garantia de que será atualizado, pois pode ser desativado em NTFS. Verifique fsutil behavior query DisableLastAccess
se está ligado. Além disso, em NTFS, pode levar até uma hora para que o LastAccessTime do arquivo seja atualizado após ter sido acessado.