2010-12-21 41 views
2

目前我正在阅读从不同的目录中的文件列表的顺序为LIST:得到的文件列表中创建

public List<string> MapMyFiles() 
     { 
      List<string> batchaddresses = new List<string>(); 
      foreach (object o in lstViewAddresses.Items) 
      { 
       try 
       { 
        batchaddresses.AddRange(Directory.GetFiles(o.ToString(), "*-E.esy")); 
       } 
       catch 
       { 
        if (MessageBox.Show(o.ToString() + " does not exist. Process anyway?", "Continue?", MessageBoxButtons.YesNo) 
         == DialogResult.Yes) { } 
        else 
        { 
         Application.Exit(); 
        } 
       } 

      } 

如何将我的列表中的创建日期进行排序?

回答

2

尝试使用FileInfo对象和排序CreationTime属性返回它作为FullName这是路径

public List<string> MapMyFiles() 
{ 
    List<FileInfo> batchaddresses = new List<FileInfo>(); 
    foreach (object o in lstViewAddresses.Items) 
    { 
     try 
     { 
      string[] files = Directory.GetFiles(o.ToString(), "*-E.esy"); 
      files.ToList().ForEach(f => batchaddresses.Add(new FileInfo(f))); 
     } 
     catch { } 
    } 

    return batchaddresses.OrderBy(f => f.CreationTime).Select(f => f.FullName).ToList(); 
} 
+0

+1但您可以通过将Directory.GetFiles()切换到DirectoryInfo.GetFiles()来移除`.ForEach`。你将最终得到一个预填充的FileInfo []`。 – 2010-12-21 18:19:50

2
List<string> pathsToSearch = ... 
List<string> batchaddresses = pathsToSearch 
    .SelectMany(p => new DirectoryInfo(p).GetFiles("*-E.esy")) 
    .OrderBy(f => f.CreationTime) 
    .Select(f => f.Name) 
    .ToList(); 
1

下面是一个工作样品之前。

顺便说一句,我试图通过用DirectoryInfo.EnumerateFiles替换DirectoryInfo.GetFiles来提高性能。但程序时间似乎是相当相同的(只有几个毫秒的差异)。有人可以解释这一点吗?

GetOrderedFileList2(new DirectoryInfo(@"C:\Program Files\")); 

    public List<string> GetOrderedFileList2(DirectoryInfo dirInfo) 
    { 
     using (new StopWatchPrinter()) 
     { 
      List<string> orderedFileList = dirInfo.EnumerateFiles("*.dll", SearchOption.AllDirectories) 
       .OrderBy(f => f.CreationTime) 
       .Select(f => f.Name) 
       .ToList(); 

      Debug.Print(string.Format("\n\n *** EnumerateFiles() - found: {0} files ***", orderedFileList.Count)); 

      return orderedFileList; 
     } 
    }