2009-08-28 12 views
0

私は単純な画像ビューアを作成していますが、私はLastTimeWriteによって画像の並べ替えをしたいと思います。写真をロードするためのOpenFileDialogがあります。フォルダ内の画像を選択すると、ProcessDirectory()が呼び出されます。LastTimeWriteで画像を並べ替え

private void ProcessDirectory() 
     { 
      FileTypes = new ArrayList(); 
      FileTypes.Add("*.JPG"); 
      FileTypes.Add("*.JPEG"); 
      FileTypes.Add("*.GIF"); 
      FileTypes.Add("*.BMP"); 
      FileTypes.Add("*.PNG"); 
      FileTypes.Add("*.TIF"); 
      FileTypes.Add("*.TIFF"); 

      string[] szFiles; 
      FileArray = new ArrayList(); 

      foreach (string szType in FileTypes) 
      { 
       szFiles = Directory.GetFiles(Directory.GetCurrentDirectory(), szType); 
       if (szFiles.Length > 0) 
        FileArray.AddRange(szFiles); 
       //switch (SortImg) 
       //{ 
       // case ("Asc"): 
       //  FileArray.Sort(); 
       //  break; 
       // case("Date"): 
       string[] MyString = new string[szFiles.Length];  
         DateTime[] creationTimes = new DateTime[szFiles.Length]; 
         for (int i = 0; i < szFiles.Length; i++) 
         { 
          creationTimes[i] = new FileInfo(szFiles[i]).LastWriteTime; 
          //creationTimes[i].ToString("yyyy-MM-dd HH:mm tt"); 
         } 

         for (int i = 0; i < szFiles.Length; i++) 
          MyString[i] = Convert.ToString(creationTimes[i].ToString("yyyy-MM-dd HH:mm tt")); 

       FileArray.Sort(); 
         listBox1.Items.AddRange(MyString); 
         FileArray.AddRange(MyString); 
... 
       } 

答えて

2

私は(これは3のC#が必要です)わずかに異なるアプローチを使用します。それは、(あなたがラムダとのLINQにアクセスすることはできません)C#2を可能性が使用している場合

List<FileInfo> files = new List<FileInfo>(); 
List<string> fileTypes = new List<string>() 
{ 
    "*.jpg", 
    "*.jpeg", 
    "*.gif", 
    "*.bmp", 
    "*.png", 
    "*.tif", 
    "*.tiff" 
}; 

DirectoryInfo dir = new DirectoryInfo(Directory.GetCurrentDirectory()); 
foreach (string fileType in fileTypes) 
{ 
    files.AddRange(dir.GetFiles(fileType)); 
} 

var sortedFiles = files.OrderBy(f => f.LastWriteTime); 

foreach (FileInfo file in sortedFiles) 
{ 
    // do something with the FileInfo 
} 

代わりに次のようにしてください:

Directory.SetCurrentDirectory(@"C:\23055329\files\desktop wallpaper"); 
List<FileInfo> files = new List<FileInfo>(); 
List<string> fileTypes = new List<string>() 
{ 
    "*.jpg", 
    "*.jpeg", 
    "*.gif", 
    "*.bmp", 
    "*.png", 
    "*.tif", 
    "*.tiff" 
}; 

DirectoryInfo dir = new DirectoryInfo(Directory.GetCurrentDirectory()); 
foreach (string fileType in fileTypes) 
{ 
    files.AddRange(dir.GetFiles(fileType)); 
} 

files.Sort(new Comparison<FileInfo>(delegate(FileInfo x, FileInfo y) 
{ 
    return x.LastWriteTime.CompareTo(y.LastWriteTime); 
})); 

foreach (FileInfo file in files) 
{ 
    // do something with the FileInfo 
    Console.WriteLine(file.ToString()); 
} 
+0

フレッドリックさん、ありがとうございます。あなたの例はうまくいきますが、ソートされた画像を表示する方法がわかりません。FielInfoの日付のみを文字列形式で表示できます。私はpictureBoxに表示されるソートされたファイルの別の配列が、並べ替えられたFileInfosでいっぱいに配列 'ファイル'でこの新しい配列を埋める方法だと思います。私はこれにはあまりにも愚かです。あなたは何か考えていますか?ありがとうございました。 –

+0

イメージを表示する場合は、 'Image'クラスの' FromFile'メソッドを使ってファイルをロードし、そのイメージを 'PictureBox'の' Image'プロパティに代入することができます。もちろん、それぞれの画像に対して1つの 'PictureBox'が必要です。 –

関連する問題