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
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
Hệ điều hành nào? Bạn có cần mã di động không? –
Tôi đang làm việc trên nền tảng cửa sổ .. –