Select the last modified file from the directory

I need to know how I can select the last modified / created file in this directory.

Currently, I have a directory called XML, and there are a lot of XML files inside it. But I would like to select only the last modified file.

+6
source share
3 answers

I use the following function to list all items inside a folder. It writes all the files in a line vector, but you can change that.

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

(don't forget to enable windows.h)

What you need to do is adapt it to search for a new file. The ffd structure (data type WIN32_FIND_DATAA) contains ftCreationTime, ftLastAccessTime and ftLastWriteTime, you can use them to find the newest file. These elements are FILETIME structures, here you can find the documentation: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284%28v=vs.85%29.aspx

+4
source

You can use FindFirstFile and FindNextFile, they deliver a structure describing the file size, as well as the modified time.

+1
source

Boost.Filesystem offers last_write_time . You can use this to sort files in a directory . Boost.Filesystem and (Boost) in general can be a little intimidating for a new C ++ user, so you can check the solution for your OS first.

0
source

Source: https://habr.com/ru/post/906555/


All Articles