2009-08-28 78 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

我會用一個稍微不同的方法(這需要的C 3#):

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 
} 

如果您正在使用C#2(這樣你就不能訪問lambda表達式和LINQ),它可以看起來像這樣:

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

非常感謝您的回答,Fredrik。你的例子工作得很好,但我看不到如何顯示排序圖像,我只能以字符串格式顯示他們的FielInfo日期。我認爲應該有另一個排序的文件數組,它將顯示在pictureBox中,但是如何用你的數組'文件'來填充這個新數組,填充有排序的FileInfos。我太笨了。你有什麼主意嗎?謝謝。 – 2009-09-01 20:40:19

+0

如果您想改爲顯示圖像,您可以選擇'Image'類的'FromFile'方法來加載文件,然後將圖像分配給'PictureBox'的'Image'屬性。您當然需要爲每個圖像使用一個「PictureBox」。 – 2009-09-02 05:55:43