Самый канонический подход, когда вы хотите удалить файлы в течение определенного времени, - это использовать 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 файла после обращения к нему может потребоваться до часа.