Сортировка результата каталога.GetFiles в C#

У меня есть этот код, чтобы перечислить все файлы в каталоге.

class GetTypesProfiler
{
    static List<Data> Test()
    {
        List<Data> dataList = new List<Data>();
        string folder = @"DIRECTORY";
        Console.Write("------------------------------------------n");
        var files = Directory.GetFiles(folder, "*.dll");
        Stopwatch sw;
        foreach (var file in files)
        {   
            string fileName = Path.GetFileName(file);
            var fileinfo = new FileInfo(file);
            long fileSize = fileinfo.Length;
            Console.WriteLine("{0}/{1}", fileName, fileSize);
        }
        return dataList;
    }
    static void Main()
    {
         ...
    }
}

Мне нужно распечатать информацию о файле на основе размера файла или в алфавитном порядке. Как я могу отсортировать результат из каталога.GetFiles ()?

3 ответов


очень легко с LINQ.

Сортировать по имени,

var sorted = Directory.GetFiles(".").OrderBy(f => f);

Сортировать по размеру,

var sorted = Directory.GetFiles(".").OrderBy(f => new FileInfo(f).Length);

заказать по дате: (возвращает перечисляемый файл):

Directory.GetFiles(folder, "*.dll").Select(fn => new FileInfo(fn)).
                                    OrderBy(f => f.Length);

или, чтобы заказать имя:

Directory.GetFiles(folder, "*.dll").Select(fn => new FileInfo(fn)).
                                    OrderBy(f => f.Name);

делая FileInfo экземпляры не нужны для заказа по имени файла, но если вы хотите применить разные методы сортировки на лету, лучше иметь свой массив FileInfo объекты на месте, а затем просто OrderBy их Length или Name свойство, следовательно, эта реализация. Кроме того, похоже, что вы собираетесь создать FileInfo в любом случае, это лучше иметь коллекцию FileInfo объекты в любом случае.

Извините, я не понял это в первый раз, должен был прочитать вопрос и документы более внимательно.


вы можете использовать LINQ, если хотите, на объекте FileInfo:

var orderedFiles =  Directory.GetFiles("").Select(f=> new FileInfo(f)).OrderBy(f=> f.CreationTime)