Сортировка списка <FileInfo>по дате создания C # - PullRequest
8 голосов
/ 25 января 2012

Использование этого примера с MSDN:

using System.Collections.Generic;  
using System.IO;  

namespace CollectionTest  
{  
    public class ListSort  
    {  
        static void Main(string[] args)  
        {  
            List<FileInfo> files = new List<FileInfo>();  
            files.Add(new FileInfo("d(1)"));  
            files.Add(new FileInfo("d"));              
            files.Add(new FileInfo("d(2)"));  

            files.Sort(new CompareFileInfoEntries());  
        }           

    }  

    public class CompareFileInfoEntries : IComparer<FileInfo> 
    {  
        public int Compare(FileInfo f1, FileInfo f2)  
        {  
            return (string.Compare(f1.Name, f2.Name));  
        }  
    }  

}  

Как бы я сравнил дату создания.

F1 имеет дату «создания» свойства, которая является FileSystemInfo.Datetime, но когда я пытаюсь это сделать:

  public class CompareFileInfoEntries : IComparer<FileInfo>
  {
      public int Compare(FileInfo f1, FileInfo f2)
      {

          return (DateTime.Compare(DateTime.Parse(f1.CreationTime), f2.CreationTime));
      }
  }  
}

Я получаю совпадения метода перегрузки для String. compare(string,string) Примечание: я использовал два метода в приведенном выше сценарии, чтобы попытаться вернуть время создания. Ни один из них не сработал - они оба были бы одинаковыми в моем настоящем сценарии.

CLOSEST я могу получить это:

return (DateTime.Compare(DateTime.Parse(f1.CreationTime.ToString()), DateTime.Parse(f2.CreationTime.ToString() )));

Ответы [ 4 ]

19 голосов
/ 25 января 2012

Описание

Вы можете просто использовать LINQ (namespace System.Linq) для этого.

Language Integrated Query (LINQ, произносится как «ссылка») является Microsoft.Компонент NET Framework, который добавляет собственные возможности запроса данных в языки .NET

Образец

List<FileInfo> orderedList = files.OrderBy(x => x.CreationTime).ToList();

Дополнительная информация

3 голосов
/ 25 января 2012

Умм, как насчет использования linq

files.OrderBy(f=>f.CreationTime)
0 голосов
/ 25 апреля 2013
Dim filePath as string = "c:\\"

Эта команда получает список файлов каталога, упорядоченный ASC

Dim orderedFiles = New System.IO.DirectoryInfo(filePath).GetFiles("*.xml")
                                                        .OrderBy(Function(x) x.CreationTime)

Эта команда получает список файлов каталога, упорядоченный по DESC

Dim orderedFiles = New System.IO.DirectoryInfo(filePath).GetFiles("*.xml")
                                                        .OrderByDescending(Function(x) x.CreationTime)
0 голосов
/ 25 января 2012

Попробуйте это:

public class CompareFileInfoEntries : IComparer<FileInfo> 
    { 
        public int Compare(FileInfo f1, FileInfo f2) 
        {
            return (string.Compare(f1.CreationTime.ToString(), f2.CreationTime.ToString())); 
        } 
    } 
...