c++ - 如何读取目录中最后修改的文件的文件名?

标签 c++ file file-type

我有一个目录,其中包含一些不同类型扩展名的文件。其中,有.grb2文件(气象数据)。例如:

...

20140729_0000_000.grb2

20140729_1200_000.grb2

20140730_1200_000.grb2

...

问题是我想用 C++ 读取最后修改的这种类型的文件 (.grb2)。由于它们是按日期命名的,因此读取文件名中数字最大的文件也是有效的,因为这是最新的气象数据。我目前正在手动阅读它(直接在 C++ 中输入其文件名),这显然不是最佳选择,因为我下载了很多此类文件。

你有什么想法吗?顺便说一句,我在 Windows 中工作(如果它有任何帮助的话)。

最佳答案

您可以考虑使用 Boost 文件系统。 Boost Filesystem 为此实现了即将发布的标准库规范。

您可以使用它编写更健壮的代码并同时独立于平台:

Live On Coliru

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/

相关文章:

java - 如何正确修补 JAR 文件中的 Java 类?

java - 从文件中读取 int[][]。 java

windows - 如何为没有文件类型的文件删除与程序的文件关联?

android - 如何为android自定义文件类型分配一个图标?

c++ - c++中tellp的使用

c++ - 哪个是整数除以 2 的更好选择?

c++ - 来自外部窗口句柄 MFC 的 Getpixel()

visual-studio-2010 - 测试时输出目录的配置文件

objective-c - 如何使用 Objective-C 获取任何文件的文件类型描述?

c++ - 有没有办法知道异常是否已被禁用?