2012-04-24 5 views
0

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

ありがとうございます!

+4

作成時間が発注名前はxxx00、xxx01、xxx02、... xxx09、xxx10、xxx11、...、xxx30になるように、なぜファイルを作成していませんか?これは 'String.Format(" xxx {0:00} "、n)'のようなもので実現できます。 'nはファイル番号、' xxx'は接頭辞です。私は私のMac上にあるので、私は構文エラーを起こしている可能性があり、明らかにこれをテストすることができませんでした:P –

+0

これを試してみましょう! :) –

+0

ありがとう@WordsLikeJared、あなたのソリューションは働いた! –

答えて

3

Directory.GetFiles();例えば、彼らに

を並べ替えることが非常に簡単になるので、単なる文字列の配列を返します。

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

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

注:int.Parseへの呼び出しの前にPath.GetFileNameWithoutExtensionを使用する必要があり、あなたが代わりint.TryParseを使用する場合があります。

+0

's'は' 1.ext'なので、それをintに解析できますか?これは機能しますか? – Kaf

+0

@Kaf名前が#.extの形式であることを保証できれば、 'int.Parse(s.split("。 ")[0])' –

+0

@mattは動作しますが、Path.GetFileNameWithoutExtensionは動作します人生のeaiser –

2

MSDN page on Directory.GetFiles()を参照してください。特に注意してください:

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

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

通常、ファイルは名前順に返されますが、その場合は0,1,11,12、...、2,20,21、... 3などとなります。 Windowsエクスプローラで名前でソートします。他の誰かがすでに提案しているように、あなたの最善の策は、先行ゼロを埋め込むことです。私。など00、01、02、03、...、10、11、12、

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; 
+1

+1しかし、DirectoryInfoを使用して不正な;)真剣にFileInfoの配列を使用してもあなたのより多くのオプションを提供するので、文字列の配列を使用するための素晴らしい代替手段です –

関連する問題