2009-09-07 3 views
4

VSTS 2008 + C#+ .Net 3.0を使用しています。私はディレクトリ内のすべてのファイルを作成時間で列挙したい、すなわち、最近作成されたファイルは最初は列挙され、古いファイルは最後に列挙される。どのようにこれを実施するためのアイデアですか?ディレクトリ内のC#リストファイル

私はおそらくこのような何かが動作するはずです... LINQとリストを使用することになり

答えて

6

何かがこのようsomithing試してみてください:

DirectoryInfo di = new DirectoryInfo("path to folder"); 
FileInfo[] files = di.GetFiles(); 
IOrderedEnumerable<FileInfo> enumerable = files.OrderBy(f => f.CreationTime); 

foreach (FileInfo info in enumerable) 
{ 
    // do stuff...   
} 
+1

尋ねられるように、より新しいファイルを最初に持つようにする必要はありませんか? –

+0

セドリック、そうです。ありがとう。 –

+1

第2のポイント:VS2008では、2.0または3.0でもラムダを使用できます!読みやすく...しかし、あなたのビルドプロセスがMsBuild 3.5を使用する場合(例えばCIサーバに気をつけて...)、 –

4

:その

 

System.IO.FileInfo[] array = new System.IO.DirectoryInfo("directory_path").GetFiles(); 
Array.Sort(array, delegate(System.IO.FileInfo f1, System.IO.FileInfo f2) 
      { 
       return f2.CreationTimeUtc.CompareTo(f1.CreationTimeUtc); 
      }); 
 
+0

申し訳ありません.Net 3.0を使用しています.LINQは使用できません。任意の.Net 3.0ベースのソリューション? – George2

2

よう

DirectoryInfo di = new DirectoryInfo("YourPath"); 
List<FileInfo> files = di.GetFiles().OrderBy(f => f.CreationTime).ToList(); 

foreach (FileInfo file in files) 
     { 
      //do something 
     } 
+0

申し訳ありません.Net 3.0を使用しています.LINQは使用できません。任意の.Net 3.0ベースのソリューション? – George2

-1
DirectoryInfo baseFolder=new DirectoryInfo("folderName"); 
FileInfo[] files=baseFolder.GetFiles(""); 
for(int i=1; i<=files.Length;i++) 
for(int j=1; j<files.Length;j++) 
{ 
    if(files[j].CreationTime > files[j+1].CreationTime) 
    { 
     FileInfo f = files[j]; 
     files[j] = files[j+1]; 
     files[j+1] = f; 
    } 
} 
+0

フレームワークはコレクションを注文するために多くのものを持っているので、私はすべてを書き直すという点を見ません! –

2

EDIT:が更新され、ここで非LINQのソリューションは、上記最古の最新でソートされます

FileInfo[] files = new DirectoryInfo("directory").GetFiles(); 
Array.Sort(files, delegate(FileInfo f1, FileInfo f2) { 
    return f2.CreationTime.CompareTo(f1.CreationTime); 
}); 

です。 return f1.CreationTime.CompareTo(f2.CreationTime);


LINQソリューション:

FileInfo[] files = new DirectoryInfo("directory").GetFiles(); 
var results = files.OrderByDescending(file => file.CreationTime); 

使用OrderByDescending最古の最新CREATIONTIMEからソートする[並べ替えを使用してそれ以外の場合は、最新のCREATIONTIMEによってソートするに最古の最新の変更デリゲートをソートするには。

+1

あなたのコメントに基づいて非LINQソリューションを別の回答に追加しました –

関連する問題