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 に答える