2011-06-07 3 views
0

пример моих имен папок, являются следующим:удаления старейшей папки, выявляя из имени папки

abc.300520111500 
abc.310520111500 
abc.310520111515 

, как вы можете видеть, эти папки подкрепленного времени даты штемпеля.

исходная папка: abc

папка резервного копирования: abc.ddMMyyyyhhmm

мой текущий код выглядит следующим образом:

var files = Directory.GetDirectories(path, "abc.*"); 
foreach(var file in files) 
Console.WriteLine(file); 
foreach(var file in files.OrderByDescending(x=>x).Skip(int.Parse(args[0]))) 
Console.WriteLine(file); 
foreach(var file in files.OrderByDescending(x=>x).Skip(int.Parse(args[0]))) 
Directory.Delete(file, true); 

где арг [0] будет определять количество папок для перехода к , Этот код всегда удаляет наименьший номер папки.

Однако в последнее время я столкнулся с проблемой, и именно тогда у нас есть изменение в месяце. например:

abc.020620111500 где 020620111500 самый маленький номер папки сейчас.

в результате abc.020620111500 всегда будет удален вместо abc.300520111500

кого-то есть какие-либо идеи, как идти о решении этого вопроса?

ответ

1

Если вы не можете изменить имена каталогов на YYYYMMDD, которые всегда будут давать нужный результат, вы можете попробовать манипулировать/разбирать строки имени файла (возможно, конвертировать в даты для сравнения), а затем перестроить имя каталога, которое будет удален.

+0

+1 Я собирался предоставить тот же самый ответ, и вы должны были вернуться назад за 30 секунд до меня. Это именно то, что нужно сделать. –

+0

Хе-хе, я ненавижу гонки против тактических часов! – baraboom

1

вы можете разделить часть datetime из списка папок и иметь неупорядоченный список. Затем закажите их по дате. что-то вроде этого.

var orderedList = 
    (from p in unorderedList 
    let value = DateTime.Parse(p.Details.Find(s => s.Name == sortColumn).Value) 
    orderby value 
    select p) 
    .ToList(); 
+0

+1 для образца фактического кода ... Я не делаю C#. – baraboom

+0

@baraboom спасибо. – Aravind

Смежные вопросы