Самый канонический подход, когда вы хотите удалить файлы в течение определенного времени, - это использовать LastWriteTime файла (последний раз, когда файл был изменен):
Directory.GetFiles(dirName)
.Select(f => new FileInfo(f))
.Where(f => f.LastWriteTime < DateTime.Now.AddMonths(-3))
.ToList()
.ForEach(f => f.Delete());
(Вышеупомянутое основано на ответе Ури, но с LastWriteTime.)
Всякий раз, когда вы слышите, как люди говорят об удалении файлов старше определенного периода времени (что является довольно распространенным действием), почти всегда они ищут выполнение этого на основе LastModifiedTime файла.
В качестве альтернативы, в очень необычных обстоятельствах вы можете использовать нижеприведенное, но используйте их с осторожностью, поскольку они содержат оговорки.
CreationTime
.Where(f => f.CreationTime < DateTime.Now.AddMonths(-3))
Время создания файла в текущем месте. Однако будьте осторожны, если файл был скопирован, это будет время его копирования и CreationTimeбудет новее, чем файл LastWriteTime.
LastAccessTime
.Where(f => f.LastAccessTime < DateTime.Now.AddMonths(-3))
Если вы хотите удалить файлы в зависимости от того, когда они были прочитаны в последний раз, вы можете использовать это, но нет никакой гарантии, что он будет обновлен, так как его можно отключить в NTFS. Проверьте, fsutil behavior query DisableLastAccessгорит ли он. Также в NTFS для обновления LastAccessTime файла после обращения к нему может потребоваться до часа.