Удалите файлы, более старые, чем 3 месяца в каталоге с помощью.NET

Я хотел бы знать (использующий C#), как я могу удалить файлы в определенном каталоге, более старом, чем 3 месяца, но я предполагаю, что период даты мог быть гибким.

Только быть ясным: Я ищу файлы, которые являются более старыми, чем 90 дней, другими словами, файлы создали, меньше чем 90 дней назад должен быть сохранен, все другие удалили.

105
задан bluish 11 March 2014 в 14:05
поделиться

7 ответов

Что-то вроде этого.

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();
}
239
ответ дан 24 November 2019 в 03:53
поделиться

Свойство GetLastAccessTime класса System.IO.File должно помочь.

3
ответ дан 24 November 2019 в 03:53
поделиться

Обычно вы можете использовать Directory.Getfiles (Path), чтобы получить список всех файлов. После этого вы просматриваете список и вызываете GetLastAccessTim (), как предложил Кейт.

1
ответ дан 24 November 2019 в 03:53
поделиться

вам просто понадобится FileInfo -> CreationTime

, а не просто вычислить разницу во времени.

в app.config вы можете сохранить значение TimeSpan , указывающее, сколько лет должно быть удалено файлу.

также проверьте метод DateTime Subtract .

удачи

0
ответ дан 24 November 2019 в 03:53
поделиться

Для тех, кто любит чрезмерно использовать 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());
27
ответ дан 24 November 2019 в 03:53
поделиться

В качестве альтернативы вы можете использовать метод File.GetCreationTime , если вам нужно удалить файлы на основе дат создания.

0
ответ дан 24 November 2019 в 03:53
поделиться

Вот фрагмент того, как получить время создания файлов в каталоге и найти те, которые были созданы 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();
        }
    }
13
ответ дан 24 November 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: