Как получить список файлов в каталоге, отсортированный по имени
Я пытаюсь получить список всех файлов в папке из С#. Достаточно легко:
Directory.GetFiles(folder)
Но мне нужен результат отсортированный в алфавитном порядке, так как все числа и Мне нужно знать наивысшее число в каталоге. Конечно, я мог бы захватить их в массив/список объектов, а затем сделать вид, но мне было интересно, если есть какой-то фильтр/параметр?
Все они называются ведущими нулями. Как:
00000000001.log
00000000002.log
00000000003.log
00000000004.log
..
00000463245.log
00000853221.log
00024323767.log
Самый простой способ? Мне не нужно получать другие файлы, просто "самый большой/последний" номер.
Ответы
Ответ 1
var files = Directory.EnumerateFiles(folder)
.OrderByDescending(filename => filename);
(Метод EnumerateFiles
является новым в .NET 4, вы все равно можете использовать GetFiles
, если используете более раннюю версию)
EDIT: на самом деле вам не нужно сортировать имена файлов, если вы используете метод MaxBy
, определенный в MoreLinq:
var lastFile = Directory.EnumerateFiles(folder).MaxBy(filename => filename);
Ответ 2
var files = from file in Directory.GetFiles(folder)
orderby file descending
select file;
var biggest = files.First();
если вы действительно после наибольшего числа, и эти лог файлы названы так, как вы предлагали, как насчет:
Directory.GetFiles(folder).Length
Ответ 3
Расширение того, что сказал @Thomas, если вам нужны только лучшие файлы X, вы можете сделать это:
int x = 10;
var files = Directory.EnumerateFiles(folder)
.OrderByDescending(filename => filename)
.Take(x);