特定のディレクトリでLast modified/createdファイルを選択する方法を知っておく必要があります。ディレクトリから最後に変更されたファイルを選択してください
私は現在XMLという名前のディレクトリを持っています。その中には多くのXMLファイルがあります。しかし、最後に変更されたファイルだけを選択したいと思います。
特定のディレクトリでLast modified/createdファイルを選択する方法を知っておく必要があります。ディレクトリから最後に変更されたファイルを選択してください
私は現在XMLという名前のディレクトリを持っています。その中には多くのXMLファイルがあります。しかし、最後に変更されたファイルだけを選択したいと思います。
次の関数を使用して、フォルダ内のすべてのアイテムを一覧表示します。すべてのファイルを文字列ベクトルに書きますが、変更することはできます。
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;
}
(WINDOWS.Hを含めることを忘れないでください)
何がしなければならないことは、最新のファイルを見つけるためにそれを適応させることです。 ffd構造体(WIN32_FIND_DATAAデータ型)には、ftCreationTime、ftLastAccessTimeおよびftLastWriteTimeが含まれています。これらを使用して最新のファイルを見つけることができます。 これらのメンバーはFILETIME構造です。ここでドキュメントを見つけることができます:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284%28v=vs.85%29.aspx
FindFirstFileとFindNextFileを使用すると、サイズや変更時刻などのファイルを記述する構造体を提供します。
これはWindows専用のソリューションであると付け加えることができます。 – pmr
ブースト。ファイルシステムは、last_write_timeを提供しています。これを使用してdirectory
のファイルをソートすることができます。 Boost.Filesystem
と(Boost)は一般に、C++の新機能を少し脅かす可能性があるので、OSのソリューションを最初にチェックしたいかもしれません。
何を試してみましたか?あなたはこの問題にどのように近づきますか?あなたの質問を編集してください。 – ScarletAmaranth
どのようなOSですか?ポータブルコードが必要ですか? –
私はWindowsプラットフォームで作業しています.. –