У меня есть список файлов, которые я хотел бы отсортировать по дате.Предостережение заключается в том, что каждый файл в списке содержит дату как часть имени файла, я хочу отсортировать файлы на основе этой даты.Причина этого заключается в том, что дата в строке имени файла коррелирует с содержимым файла, т. Е. Фактическое свойство даты каждого файла, дата создания, изменения, обращения и т. Д. Могут изменяться при каждом перемещении файла.или изменены, и поэтому я не могу полагаться на это в моих целях.Я создаю пользовательский компаратор для использования в методе сортировки списков, но я хотел посмотреть, есть ли у кого-нибудь еще какие-то лучшие или уникальные подходы к этому.Заранее спасибо.
ОБНОВЛЕНИЕ:
В ответ на комментарий Саида имя файла имеет следующий формат:
{Test Name}_{YYYYMMDD}_{HHmmSS}.txt
Где ГГГГММДД и ЧЧммСС - это дата и время, соответственно.
ОБНОВЛЕНИЕ 2:
Хорошо, у меня есть записанный компаратор, который, кажется, отлично справляется с работой, вот если это поможет кому-то еще;это не займет много усилий, чтобы изменить его для поиска любых других элементов в имени файла, просто нужно изменить регулярное выражение.Спасибо всем за предложения, конструктивная критика всегда приветствуется.
public class TDRDateTimeComparer : IComparer<FileInfo>
{
public int Compare(FileInfo x, FileInfo y)
{
//Return if both strings are null or empty
if (string.IsNullOrEmpty(x.Name) && string.IsNullOrEmpty(y.Name))
{
return 0;
}
Regex rDateTime = new Regex(@"(19|20|21)\d\d(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])_([0-1]\d|2[0-3])([0-5]\d)([0-5]\d)");
/* NOTE: File names will already have been validated at this point, so no need to validate the date/time again.*/
string date1 = rDateTime.Match(x.Name).Value, date2 = rDateTime.Match(y.Name).Value;
DateTime d1 = DateTime.ParseExact(date1, "yyyyMMdd_HHmmss", null), d2 = DateTime.ParseExact(date2, "yyyyMMdd_HHmmss", null);
return d1.CompareTo(d2);
}
}