从目录中选择上次修改的文件
Select the last modified file from a directory
我需要知道如何在给定的目录中选择上次修改/创建的文件。
我目前有一个名为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_IND_DATAA数据类型)包含ftCreationTime、ftLastAccessTime和ftLastWriteTime,您可以使用它们来查找最新的文件。这些成员是FILETIME结构,您可以在此处找到文档:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284%28v=vs.85%29.aspx
您可以使用FindFirstFile和FindNextFile,它们提供了一个描述文件大小和修改时间的结构。
Boost.Filesystem提供last_write_time。您可以使用它对directory
中的文件进行排序。Boost.Filesystem
和(Boost)对于一个C++新手来说可能有点吓人,所以你可能想先检查一下你的操作系统的解决方案。
相关文章:
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 已修改的LinkedList未在文本文件本身中更新
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 什么文件可以修改 atom 的C++语法?
- 修改生成文件以简化框架 #include 路径
- Windows std::fstream 修改文件后打开()?
- Chilkat SFTP 文件修改时间不与上传更新
- 如何在 Windows 上的 C++ 中根据文件的修改时间读取目录中的文件
- 如何使用Winforms C#或C++.Net在不更改文件中其他内容的情况下修改jpg文件中的Orientation e
- 如何修改Lambda表达式以将输出放入文本文件
- 我如何确保修改.H文件时,使用Visual Studio 2008将包括其在内的.cc文件自动编译
- 在 Windows 中修改文件夹时通知我的应用程序
- C++ - 修改文件而不创建新文件
- 如何在C++的目录中查找具有通配符匹配的最后一个修改文件
- C++:无法修改文件中的某个记录
- 如何修改文件夹中所有文件的代码
- 读取和修改文件的最佳方式(c++)
- MAKEFILE:在不修改文件的情况下将目标视为已更新
- iPhone:在Xcode中编译C++文件而不修改文件扩展名
- 每次修改文件时运行getline