2012-01-21 26 views
6

Tôi cần biết, làm cách nào tôi có thể chọn tệp được sửa đổi/tạo lần cuối trong một thư mục nhất định.Chọn tập tin đã sửa đổi lần cuối từ một thư mục

Tôi hiện có thư mục có tên XML và bên trong có nhiều tệp XML. Nhưng tôi chỉ muốn chọn tệp được sửa đổi lần cuối.

+1

Bạn đã thử gì chưa? Làm thế nào bạn sẽ đi về tiếp cận vấn đề này? Chỉnh sửa câu hỏi của bạn. – ScarletAmaranth

+1

Hệ điều hành nào? Bạn có cần mã di động không? –

+0

Tôi đang làm việc trên nền tảng cửa sổ .. –

Trả lời

4

Tôi sử dụng chức năng sau để liệt kê tất cả các mục bên trong một thư mục. Nó viết tất cả các tập tin trong một vector chuỗi, nhưng bạn có thể thay đổi điều đó.

bool ListContents (vector<string>& dest, string dir, string filter, bool recursively) 
{ 
    WIN32_FIND_DATAA ffd; 
    HANDLE hFind = INVALID_HANDLE_VALUE; 
    DWORD dwError = 0; 

    // Prepare string 
    if (dir.back() != '\\') dir += "\\"; 

    // Safety check 
    if (dir.length() >= MAX_PATH) { 
     Error("Cannot open folder %s: path too long", dir.c_str()); 
     return false; 
    } 

    // First entry in directory 
    hFind = FindFirstFileA((dir + filter).c_str(), &ffd); 

    if (hFind == INVALID_HANDLE_VALUE) { 
     Error("Cannot open folder in folder %s: error accessing first entry.", dir.c_str()); 
     return false; 
    } 

    // List files in directory 
    do { 
     // Ignore . and .. folders, they cause stack overflow 
     if (strcmp(ffd.cFileName, ".") == 0) continue; 
     if (strcmp(ffd.cFileName, "..") == 0) continue; 

     // Is directory? 
     if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
     { 
      // Go inside recursively 
      if (recursively) 
       ListContents(dest, dir + ffd.cFileName, filter, recursively, content_type); 
     } 

     // Add file to our list 
     else dest.push_back(dir + ffd.cFileName); 

    } while (FindNextFileA(hFind, &ffd)); 

    // Get last error 
    dwError = GetLastError(); 
    if (dwError != ERROR_NO_MORE_FILES) { 
     Error("Error reading file list in folder %s.", dir.c_str()); 
     return false; 
    } 

    return true; 
} 

(đừng quên bao gồm windows.h)

Những gì bạn phải làm là thích ứng với nó để tìm tập tin mới nhất. Cấu trúc ffd (kiểu dữ liệu WIN32_FIND_DATAA) chứa ftCreationTime, ftLastAccessTime và ftLastWriteTime, bạn có thể sử dụng chúng để tìm tệp mới nhất. Các thành viên này là cấu trúc FILETIME, bạn có thể tìm tài liệu tại đây: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284%28v=vs.85%29.aspx

1

Bạn có thể sử dụng FindFirstFile và FindNextFile, chúng phân phối cấu trúc mô tả tệp như kích thước cũng như thời gian sửa đổi.

+0

Bạn có thể muốn thêm rằng đây là giải pháp chỉ dành cho Windows. – pmr

0

Boost.Filesystem cung cấp last_write_time. Bạn có thể sử dụng điều này để sắp xếp các tệp theo số directory. Boost.Filesystem và (Boost) nói chung có thể là một chút đáng sợ cho một C++ mới comer, do đó bạn có thể muốn kiểm tra một giải pháp cho hệ điều hành của bạn đầu tiên.

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