2012-06-09 15 views
5

Yani bu rutin vardır:Dosya oluşturma tarihine göre sıralama (ve numaralandırma) dizini?

public static IEnumerable<string> GetFiles(string path, string[] searchPatterns, SearchOption searchOption = SearchOption.TopDirectoryOnly) { 
    return searchPatterns.AsParallel() 
         .SelectMany(searchPattern => 
          Directory.EnumerateFiles(path, searchPattern, searchOption)) 
         .OrderBy<string, string>((f) => f) 
         .Distinct<string>(); 
} 

ve çalışma ama onun adı dosyaları sipariş ve ben onun oluşturulma tarihi döndürdüğü dosyaları sipariş etmek gerekir. Öğe, rutindeki gibi bir dizeyse, bunu nasıl sıralayabilirim. Enumerate kullanmak istiyorum neden dosyaları 1k'den fazla olması bekleniyor.

Teşekkürler.

+1

Lütfen sorunu basitleştirin/odaklayın. "Numaralandırma" veya "Sipariş" hakkında soru var mı? –

+0

@pst Oluşturma tarihine göre sıralanmış dosyaları numaralandır –

cevap

12

Bu sorgu için Görev Paralel Kitaplığını gerçekten kullanmak istediğinizden emin değilim. Bazı nedenlerle, bu soruya How to find all exe files on disk using C#? bakın.

Dosyaları oluşturma tarihine göre numaralandırmaya gelince, sağlanan yolu kullanarak yeni bir DirectoryInfo oluşturarak işlevi başlatır ve deseninizle eşleşen tüm dosyaları almak için .EnumerateFiles(string pattern, SearchOption searchOption) numaralı telefonu arayın. Son olarak, döndürülen numaralandırma FileInfo nesnelerin CreationTime özelliğiyle sipariş edebilirsiniz ve sonra da şöyle sadece onların Name tam FileInfo nesneleri döndüren veya:

public static IEnumerable<string> GetFiles(string path, string[] searchPatterns, SearchOption searchOption = SearchOption.TopDirectoryOnly) { 
    DirectoryInfo dir = new DirectoryInfo(path); 
    var dirs = (from file in dir.EnumerateFiles(searchPatterns, searchOptions) 
      orderby file.CreationTime ascending 
      select file.Name).Distinct(); // Don't need <string> here, since it's implied 
    return dirs; 
} 

Not: Ben erişimi yok Şu anda bir derleyici, ama yukarıdaki kodun hatasız olduğuna inanıyorum.

+0

System.Linq; – chorbs

2

FileInfo örneklerinin bir koleksiyonunu döndürecek DirectoryInfo.EnumerateFiles'u kullanmanız gerekir. Bunları tarihlere göre sıralayabilir ve isimleri seçebilirsiniz.

İlgili konular