2010-12-21 38 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; 
     } 
    }