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
source share