如何检索目录中的文件列表,按名称排序

时间:2011-08-05 12:59:37

标签: c# file directory alphabetical-sort

我正在尝试从C#获取文件夹中所有文件的列表。很容易:

Directory.GetFiles(folder)

但是我需要按字母顺序排序结果,因为它们都是数字而我需要知道目录中的最高数字。当然我可以把它们抓到一个数组/列表对象然后进行排序,但我想知道是否有一些过滤器/参数呢?

它们都以前导零命名。像:

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

最简单的方法是什么?我不需要获取其他文件,只需要“最大/最新”的数字。

3 个答案:

答案 0 :(得分:34)

var files = Directory.EnumerateFiles(folder)
                     .OrderByDescending(filename => filename);

EnumerateFiles方法是.NET 4中的新方法,如果您使用的是早期版本,仍然可以使用GetFiles


编辑:如果您使用MoreLinq中定义的MaxBy方法,实际上您无需对文件名进行排序:

var lastFile = Directory.EnumerateFiles(folder).MaxBy(filename => filename);

答案 1 :(得分:16)

var files = from file in Directory.GetFiles(folder)    
               orderby file descending 
               select file;

var biggest = files.First();

如果你真的在最高数字之后并且这些日志文件的名称与你建议的一样,那么:

Directory.GetFiles(folder).Length

答案 2 :(得分:6)

扩展@Thomas所说的内容,如果你只需要前X个文件,你可以这样做:

int x = 10;
var files = Directory.EnumerateFiles(folder)
                 .OrderByDescending(filename => filename)
                 .Take(x);