20

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

Directory.GetFiles(folder)

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

它们都以前导零命名。喜欢:

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

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

4

3 回答 3

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

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


编辑:实际上,如果您使用MoreLinqMaxBy中定义的方法,则不需要对文件名进行排序:

var lastFile = Directory.EnumerateFiles(folder).MaxBy(filename => filename);
于 2011-08-05T13:00:49.620 回答
16
var files = from file in Directory.GetFiles(folder)    
               orderby file descending 
               select file;

var biggest = files.First();

如果您真的在追求最高数字并且这些日志文件的命名方式如您所建议的那样,那么:

Directory.GetFiles(folder).Length
于 2011-08-05T13:01:55.453 回答
6

扩展@Thomas 所说的内容,如果您只需要顶部 X 文件,则可以这样做:

int x = 10;
var files = Directory.EnumerateFiles(folder)
                 .OrderByDescending(filename => filename)
                 .Take(x);
于 2011-08-05T13:02:41.413 回答