我有一个目录,其中包含一些不同类型扩展名的文件。其中,有.grb2文件(气象数据)。例如:
...
20140729_0000_000.grb2
20140729_1200_000.grb2
20140730_1200_000.grb2
...
问题是我想用 C++ 读取最后修改的这种类型的文件 (.grb2)。由于它们是按日期命名的,因此读取文件名中数字最大的文件也是有效的,因为这是最新的气象数据。我目前正在手动阅读它(直接在 C++ 中输入其文件名),这显然不是最佳选择,因为我下载了很多此类文件。
你有什么想法吗?顺便说一句,我在 Windows 中工作(如果它有任何帮助的话)。
最佳答案
您可以考虑使用 Boost 文件系统。 Boost Filesystem 为此实现了即将发布的标准库规范。
您可以使用它编写更健壮的代码并同时独立于平台:
for (auto&& entry : boost::make_iterator_range(fs::directory_iterator("."), {})) {
fs::path p = entry.path();
if (is_regular_file(p) && p.extension() == ".grb2")
{
std::time_t timestamp = fs::last_write_time(p);
if (timestamp > latest_tm) {
latest = p;
latest_tm = timestamp;
}
}
}
虽然这段代码不是用记事本 ¹ 编写的,但它已经过测试:
/tmp$
mkdir q
/tmp$
cd q
/tmp/q$
touch {a..z}.grb2
/tmp/q$
../test
报告:
Last modified: "./z.grb2"
/tmp/q$
touch k.grb2
/tmp/q$
../test
报告:
Last modified: "./k.grb2"
¹ 全面披露:它是在 Ubuntu Linux 上用 Vim 编写的
关于c++ - 如何读取目录中最后修改的文件的文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27217063/