如何查看文件的最后修改时间
C++ How to check the last modified time of a file
我正在缓存文件中的一些信息,我希望能够定期检查文件的内容是否已被修改,以便我可以再次读取文件以获得新的内容,如果需要
这就是为什么我想知道是否有一种方法可以在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相关文章:
- 如果返回 -1,时间() 的参数是否被修改?
- Chilkat SFTP 文件修改时间不与上传更新
- 如何在 Windows 上的 C++ 中根据文件的修改时间读取目录中的文件
- 如何找到修改后的字符串与原始字符串相等的时间
- 在C++中修改字符串的BigO时间复杂度是多少
- 当该应用程序中加速文件的最后一个修改时间发生更改时,如何重新启动应用程序
- 是二维阵列访问/修改时间组
- C++17:是编译器为(静态存储持续时间)const引用绑定创建的可修改的临时对象(和存储)
- C++ 时间存储time_point表达式必须是可修改的左值
- 获取文件创建或修改时间
- 修改发送DBT_DEVICEMREMOVECOMPLETE之前的时间
- 以非管理员身份在 Windows 上的 C 中检查上次文件修改时间
- 在c++中修改时间程序时出现逻辑错误
- 通过修改时间获取目录中的文件
- 在C++中设置文件修改时间的可移植方法
- C++将修改后的MySQL时间戳存储为字符串
- 修改connect()超时时间
- 如何查看文件的最后修改时间
- 使用stat api获取不正确的文件修改时间
- c++中文件按修改时间排序