如何查看文件的最后修改时间

C++ How to check the last modified time of a file

本文关键字:修改 时间 最后 何查看 文件      更新时间:2023-10-16

我正在缓存文件中的一些信息,我希望能够定期检查文件的内容是否已被修改,以便我可以再次读取文件以获得新的内容,如果需要

这就是为什么我想知道是否有一种方法可以在c++中获得文件的最后修改时间。

没有特定于语言的方法来做到这一点,但是操作系统提供了所需的功能。在unix系统中,stat函数就是您所需要的。Visual Studio为windows提供了一个等效的_stat函数。

下面的代码可以同时使用

#include <sys/types.h>
#include <sys/stat.h>
#ifndef WIN32
#include <unistd.h>
#endif
#ifdef WIN32
#define stat _stat
#endif
auto filename = "/path/to/file";
struct stat result;
if(stat(filename.c_str(), &result)==0)
{
    auto mod_time = result.st_mtime;
    ...
}

从这篇文章开始,c++17已经发布了,它包含了一个基于boost文件系统库的文件系统库:

https://en.cppreference.com/w/cpp/header/filesystem

包含获取最后修改时间的方法:

https://en.cppreference.com/w/cpp/filesystem/last_write_time

您可以使用boost的last_write_time。Boost是跨平台的

这是教程的链接。

Boost的优点是它适用于所有类型的文件名,因此它可以处理非ascii文件名。

请注意有一些限制:

…在某些文件系统上,[时间]分辨率低至一小时……在程序执行期间,系统时钟可能被其他进程(可能是自动的)设置为一个新值。

还要注意,在复制文件(在Windows上)之后,副本的last_write_time是原始文件的last_write_time,而不是像人们天真地认为的那样创建副本的时间。

这个跨平台库(Mac, Windows, Linux)很容易添加到项目中。它使用#ifdef来编译正确的实现。

https://github.com/jameswynn/simplefilewatcher