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