DirectInfo.GetFiles返回数组的默认排序

NTFS和CDFS下,是按照字母顺序,而FAT下,按照文件创建时间顺序

  1 using System;
  2 using System.Collections;
  3 using System.IO;
  4 
  5 namespace ConsoleApplication1
  6 {
  7     /// <summary>
  8     /// 文件排序类
  9     /// </summary>
 10     public class FileSort : IComparer
 11     {
 12         private FileOrder _fileorder;
 13         private FileAsc _fileasc;
 14 
 15         /// <summary>
 16         /// 构造函数
 17         /// </summary>
 18         public FileSort()
 19             : this(FileOrder.Name, FileAsc.Asc)
 20         { }
 21 
 22         /// <summary>
 23         /// 构造函数
 24         /// </summary>
 25         /// <param name="fileorder"></param>
 26         public FileSort(FileOrder fileorder)
 27             : this(fileorder, FileAsc.Asc)
 28         { }
 29 
 30         /// <summary>
 31         /// 构造函数
 32         /// </summary>
 33         /// <param name="fileorder"></param>
 34         /// <param name="fileasc"></param>
 35         public FileSort(FileOrder fileorder, FileAsc fileasc)
 36         {
 37             _fileorder = fileorder;
 38             _fileasc = fileasc;
 39         }
 40 
 41         /// <summary>
 42         /// 比较函数
 43         /// </summary>
 44         /// <param name="x"></param>
 45         /// <param name="y"></param>
 46         /// <returns></returns>
 47         public int Compare(object x, object y)
 48         {
 49             FileInfo file1 = x as FileInfo;
 50             FileInfo file2 = y as FileInfo;
 51             FileInfo file3;
 52 
 53             if (file1 == null || file2 == null)
 54                 throw new ArgumentException("参数不是FileInfo类实例.");
 55 
 56             if (_fileasc == FileAsc.Desc)
 57             {
 58                 file3 = file1;
 59                 file1 = file2;
 60                 file2 = file3;
 61             }
 62 
 63             switch (_fileorder)
 64             {
 65                 case FileOrder.Name:
 66                     return file1.Name.CompareTo(file2.Name);
 67                 case FileOrder.Length:
 68                     return file1.Length.CompareTo(file2.Length);
 69                 case FileOrder.Extension:
 70                     return file1.Extension.CompareTo(file2.Extension);
 71                 case FileOrder.CreationTime:
 72                     return file1.CreationTime.CompareTo(file2.CreationTime);
 73                 case FileOrder.LastAccessTime:
 74                     return file1.LastAccessTime.CompareTo(file2.LastAccessTime);
 75                 case FileOrder.LastWriteTime:
 76                     return file1.LastWriteTime.CompareTo(file2.LastWriteTime);
 77                 default:
 78                     return 0;
 79             }
 80         }
 81     }
 82 
 83     /// <summary>
 84     /// 排序依据
 85     /// </summary>
 86     public enum FileOrder
 87     {
 88         /// <summary>
 89         /// 文件名
 90         /// </summary>
 91         Name,
 92         /// <summary>
 93         /// 大小
 94         /// </summary>
 95         Length,
 96         /// <summary>
 97         /// 类型
 98         /// </summary>
 99         Extension,
100         /// <summary>
101         /// 创建时间
102         /// </summary>
103         CreationTime,
104         /// <summary>
105         /// 访问时间
106         /// </summary>
107         LastAccessTime,
108         /// <summary>
109         /// 修改时间
110         /// </summary>
111         LastWriteTime
112     }
113 
114     /// <summary>
115     /// 升序降序
116     /// </summary>
117     public enum FileAsc
118     {
119         /// <summary>
120         /// 升序
121         /// </summary>
122         Asc,
123         /// <summary>
124         /// 降序
125         /// </summary>
126         Desc
127     }
128 }
 1 using System;
 2 using System.IO;
 3 
 4 namespace ConsoleApplication1
 5 {
 6     class Program
 7     {
 8         static void Main(string[] args)
 9         {
10             DirectoryInfo dirInfo = new DirectoryInfo(@"F:\abc");
11             FileInfo[] lstFile = dirInfo.GetFiles();
12             Array.Sort(lstFile, new FileSort(FileOrder.LastWriteTime)); //按修改日期升序排列
13             foreach (FileInfo file in lstFile)
14                 Console.WriteLine(file.Name);
15 
16             Console.Read();
17 
18         }
19     }    
20 }

 

 

posted @ 2013-08-15 14:24  dodo-yufan  阅读(3537)  评论(1编辑  收藏  举报