0

StreamWriterクラスを使用して、0からたとえば30まで順番に名前が付けられた一連のファイルを作成しています。それらをループで読み戻そうとすると、2つのファイルを比較すると、0は10と比較され、次に11と比較され、19まで続き、0は2と比較され、次に21というようになります。代わりに0と1、次に2などを比較する方法はありますか?Directory.GetFiles();でファイルを読んでいます。

ありがとう!

4

3 に答える 3

3

Directory.GetFiles();文字列配列を返すだけなので、並べ替えは非常に簡単です。

例えば

       var files = Directory.GetFiles();
       var orderedFiles = files.OrderBy(s=>int.Parse( s));

        foreach (string s in orderedFiles)
        {
            Console.WriteLine(s);
        }

Path.GetFileNameWithoutExtension注: int.Parseを呼び出す前に使用する必要がある場合があり、int.TryParse代わりに使用することもできます。

于 2012-04-24T18:18:14.520 に答える
2

Directory.GetFiles()のMSDNページを参照してください。特にこれに注意してください:

返されるファイル名の順序は保証されません。特定の並べ替え順序が必要な場合は、Sort()メソッドを使用します。

ファイル名を取得して、自分で並べ替える必要があります。

通常、ファイルは名前順に返されますが、その場合、順序は0、1、11、12、...、2、20、21、...3などになります。名前で並べ替えるとこれがわかります。 Windowsエクスプローラーで。他の誰かがすでに示唆しているように、あなたの最善の策は先行ゼロで埋めることです。つまり、00、01、02、03、...、10、11、12など。

于 2012-04-24T18:15:42.290 に答える
2

これはあなたのためのトリックを行います。作成時間順に並べ替え

System.IO.DirectoryInfo di = new System.IO.DirectoryInfo("YourDirectoryPath");
System.IO.FileInfo[] files = di.GetFiles();

var sortedFiles = from f in files
                          orderby f.CreationTime ascending
                          select f;
于 2012-04-24T18:32:14.020 に答える