StreamWriterクラスを使用して、0からたとえば30まで順番に名前が付けられた一連のファイルを作成しています。それらをループで読み戻そうとすると、2つのファイルを比較すると、0は10と比較され、次に11と比較され、19まで続き、0は2と比較され、次に21というようになります。代わりに0と1、次に2などを比較する方法はありますか?Directory.GetFiles();でファイルを読んでいます。
ありがとう!
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
代わりに使用することもできます。
Directory.GetFiles()のMSDNページを参照してください。特にこれに注意してください:
返されるファイル名の順序は保証されません。特定の並べ替え順序が必要な場合は、Sort()メソッドを使用します。
ファイル名を取得して、自分で並べ替える必要があります。
通常、ファイルは名前順に返されますが、その場合、順序は0、1、11、12、...、2、20、21、...3などになります。名前で並べ替えるとこれがわかります。 Windowsエクスプローラーで。他の誰かがすでに示唆しているように、あなたの最善の策は先行ゼロで埋めることです。つまり、00、01、02、03、...、10、11、12など。
これはあなたのためのトリックを行います。作成時間順に並べ替え
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;