web-dev-qa-db-ja.com

名前でソートされたディレクトリ内のファイルのリストを取得する方法

C#からフォルダー内のすべてのファイルのリストを取得しようとしています。簡単:

Directory.GetFiles(folder)

しかし、それらはすべて数字であり、ディレクトリ内の最大の数字を知る必要がありますであるため、アルファベット順に逆にソートされた結果が必要です。もちろん、それらを配列/リストオブジェクトに取り込み、ソートすることはできますが、代わりにフィルター/パラメーターがあるのではないかと思いましたか?

それらはすべて先行ゼロで名前が付けられます。お気に入り:

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

最も簡単な方法は何ですか?他のファイルを取得する必要はありません。「最大/最新」の番号だけを取得します。

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

EnumerateFilesメソッドは.NET 4で新しく追加されました。以前のバージョンを使用している場合は、GetFilesを引き続き使用できます)


編集: MoreLinq で定義されているMaxByメソッドを使用する場合、実際にはファイル名をソートする必要はありません。

var lastFile = Directory.EnumerateFiles(folder).MaxBy(filename => filename);
36
Thomas Levesque
var files = from file in Directory.GetFiles(folder)    
               orderby file descending 
               select file;

var biggest = files.First();

あなたが本当に最高の数を求めていて、それらのログファイルがあなたが提案したように命名されているなら、どうですか:

Directory.GetFiles(folder).Length
16
yas4891

@Thomasの発言を拡張し、上位Xファイルのみが必要な場合は、これを行うことができます。

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