Как получить список файлов в каталоге, отсортированный по имени - PullRequest
20 голосов
/ 05 августа 2011

Я пытаюсь получить список всех файлов в папке из C #. Достаточно просто:

Directory.GetFiles(folder)

Но мне нужно отсортировать результат в алфавитном порядке, так как они все числа и Мне нужно знать наибольшее число в каталоге . Конечно, я мог бы захватить их в объект массива / списка и затем выполнить сортировку, но мне было интересно, есть ли какой-нибудь фильтр / параметр вместо этого?

Все они названы с ведущими нулями. Как:

00000000001.log
00000000002.log
00000000003.log
00000000004.log
..
00000463245.log
00000853221.log
00024323767.log

Какой самый простой способ? Мне не нужно получать другие файлы, только «самый большой / последний» номер.

Ответы [ 3 ]

34 голосов
/ 05 августа 2011
var files = Directory.EnumerateFiles(folder)
                     .OrderByDescending(filename => filename);

(EnumerateFiles метод является новым в .NET 4, вы все равно можете использовать GetFiles, если используете более раннюю версию)Не нужно сортировать имена файлов, если вы используете метод MaxBy, определенный в MoreLinq :

var lastFile = Directory.EnumerateFiles(folder).MaxBy(filename => filename);
16 голосов
/ 05 августа 2011
var files = from file in Directory.GetFiles(folder)    
               orderby file descending 
               select file;

var biggest = files.First();

если вы действительно набираете наибольшее число, и эти лог-файлы названы так, как вы предлагали, как насчет:

Directory.GetFiles(folder).Length
6 голосов
/ 05 августа 2011

Расширяя сказанное @Thomas, если вам нужны только лучшие X-файлы, вы можете сделать это:

int x = 10;
var files = Directory.EnumerateFiles(folder)
                 .OrderByDescending(filename => filename)
                 .Take(x);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...