2012-07-09 29 views
7

Có cách nào để tôi có thể lưu trữ vị trí tệp của 5 tệp được sửa đổi lần cuối từ thư mục bằng cách sử dụng Array không?C#: Nhận 5 tệp mới nhất (được sửa đổi lần cuối) từ thư mục

Tôi hiện đang sử dụng các mã sau đây để tải tệp lần cuối:

DateTime lastHigh = new DateTime(1900,1,1); 
string highDir; 
foreach (string subdir in Directory.GetDirectories(path)){ 
    DirectoryInfo fi1 = new DirectoryInfo(subdir); 
    DateTime created = fi1.LastWriteTime; 

    if (created > lastHigh){ 
     highDir = subdir; 
     lastHigh = created; 
    } 
} 

tôi sẽ sử dụng Array để gửi nhiều file đến một địa chỉ email dưới dạng tập tin đính kèm.

CẬP NHẬT

Tôi hiện đang sử dụng các mã dưới đây để có được các tập tin sửa đổi lần cuối sau 1 phút:

string myDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), 
        "Test Folder"); 
var directory = new DirectoryInfo(myDirectory); 
DateTime from_date = DateTime.Now.AddMinutes(-1); 
DateTime to_date = DateTime.Now; 
var files = directory.GetFiles().Where(file => file.LastWriteTime >= from_date && file.LastWriteTime <= to_date); 

Tôi muốn lưu vào danh sách các tên tập tin đến từ files

+1

Bạn chỉ cần ".ToArray()" ở cuối định nghĩa tệp không? tức là 'var files = directory.GetFiles(). Ở đâu (file => file.LastWriteTime> = from_date && file.LastWriteTime <= to_date) .ToArray();' – Michael

+1

@Michael Tôi tiếp tục nhận được lỗi "Không thể chuyển đổi loại ngầm ' string 'to' System.IO.FileInfo '" – abramlimpin

+1

Bạn phải tạo một đối tượng' FileInfo' từ một đường dẫn. Sử dụng hàm tạo thích hợp, 'FileInfo mới (đường dẫn)' –

Trả lời

19

Dưới đây là cách tổng quát để thực hiện việc này với LINQ:

Directory.GetFiles(path) 
      .Select(x => new FileInfo(x)) 
      .OrderByDescending(x => x.LastWriteTime) 
      .Take(5) 
      .ToArray() 

Tôi nghi ngờ đây không phải là điều bạn muốn, vì các ví dụ mã của bạn dường như đang hoạt động ở các nhiệm vụ khác nhau, nhưng trong trường hợp chung, điều này sẽ làm tiêu đề câu hỏi của bạn yêu cầu.

+0

Cảm ơn bạn! Điều này giải quyết vấn đề của tôi! – abramlimpin

+0

Làm cách nào để có được Thư mục được sửa đổi lần cuối cùng một cách? – VarunJi

+2

Trong khi câu trả lời này hoạt động, tôi nghĩ câu trả lời tại http://stackoverflow.com/questions/1179970/c-sharp-find-most-recent-file-in-dir có thể tốt hơn. – newman

1

Có vẻ như bạn muốn có một mảng string của toàn bộ tập tin đính kèm của tất cả các tệp trong một thư mục.

Với bạn đã có bạn FileInfo đếm được, bạn có thể làm điều này:

var filenames = files.Select(f => f.FullName).ToArray(); 

Nếu bạn muốn chỉ là tên tập tin, thay thế FullName với Name.

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