2012-06-09 26 views
5

Vì vậy, tôi có thói quen này:Đặt hàng (và liệt kê) danh sách thư mục theo ngày tạo tập tin?

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>(); 
} 

và làm việc của mình nhưng ra lệnh cho các tập tin theo tên của nó và tôi cần phải ra lệnh cho các tập tin được trả về bởi ngày tạo của nó. Làm thế nào tôi có thể sắp xếp theo đó nếu mục là một chuỗi như trong thói quen. Tôi muốn sử dụng liệt kê các tệp gây ra được mong đợi nhiều hơn 1k.

Cảm ơn.

+1

Vui lòng đơn giản hóa/tập trung câu hỏi. Câu hỏi về "Đếm" hoặc "Đặt hàng"? –

+0

@pst Liệt kê các tệp được sắp xếp theo ngày tạo của nó –

Trả lời

12

Tôi không chắc chắn bạn thực sự muốn sử dụng Thư viện song song nhiệm vụ cho truy vấn đó. Vì một số lý do, hãy xem câu hỏi này How to find all exe files on disk using C#?.

Để liệt kê các tệp theo ngày tạo, tôi sẽ khởi động hàm bằng cách tạo DirectoryInfo mới bằng đường dẫn được cung cấp, sau đó gọi .EnumerateFiles(string pattern, SearchOption searchOption) để nhận tất cả các tệp phù hợp với mẫu của bạn. Cuối cùng, bạn có thể đặt hàng bằng các CreationTime tài sản của FileInfo đối tượng trong liệt kê trở lại và sau đó, hoặc trả lại đối tượng FileInfo đầy đủ, hoặc chỉ Name của họ, như vậy:

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; 
} 

Lưu ý: Tôi không có quyền truy cập vào một trình biên dịch tại thời điểm này, nhưng tôi tin rằng mã trên là lỗi miễn phí.

+0

Phải bao gồm 'using System.Linq;' – chorbs

2

Bạn cần chuyển sang sử dụng DirectoryInfo.EnumerateFiles, thao tác này sẽ trả lại tập hợp các phiên bản FileInfo. Sau đó, bạn có thể sắp xếp chúng theo ngày và chọn tên.

Các vấn đề liên quan