当前位置: 首页 > news >正文

【代码讲解】【C/C++】获取文件最后修改的时间(系统时间)

获取文件最后修改的时间(系统时间)

一、功能代码

#include
#include
#include

int main() {
auto ftime = fs::last_write_time(filePath);
auto sctp = std::chrono::time_point_caststd::chrono::system_clock::duration(ftime - fs::file_time_type::clock::now() + std::chrono::system_clock::now());
time_t tt = std::chrono::system_clock::to_time_t(sctp);
std::cout << "Last write time as time_t: " << tt << std::endl;
return 0;
}
在这个示例中,我们首先获取当前时间的 time_point,然后使用 to_time_t 将其转换为 time_t 类型,并打印出来。


二、代码讲解

这段代码是C++17中 库与chrono库,用于获取文件的最后写入时间,并将其转换为 std::chrono::system_clock::time_point 类型,最终转换为 time_t 类型的值。下面是对代码的逐行解释:

2.1 fs::last_write_time

auto ftime = fs::last_write_time(filePath);

这行代码使用 std::filesystem 命名空间中的 last_write_time 函数获取指定 filePath 的最后写入时间。ftime 是一个 fs::file_time_type 类型的对象,它表示文件系统的最后写入时间。

2.2 将写入时间从文件系统时钟转换为系统时钟

auto sctp = std::chrono::time_point_cast<std::chrono::system_clock::duration>(ftime - fs::file_time_type::clock::now() + std::chrono::system_clock::now());

这行代码稍微复杂一些,让我们分解来看:

  • 获取时间偏差

ftime - fs::file_time_type::clock::now():这行代码计算 ftime 与文件系统时钟的当前时间之间的差异。由于 fs::file_time_type 可能与系统时钟不同,所以这里使用 fs::file_time_type::clock::now() 来获取文件系统时钟的当前时间。

  • 将文件系统时钟的时间转换为系统时钟的时间
  • std::chrono::system_clock::now():将上一步的结果加上系统时钟的当前时间,目的是将文件系统时钟的时间转换为系统时钟的时间。
  • 时间点转换
    std::chrono::time_point_caststd::chrono::system_clock::duration(…):这是 std::chrono 命名空间中的一个函数,用于将时间点从一种持续时间转换为另一种持续时间。在这里,它将文件系统时钟的时间点转换为 std::chrono::system_clock 的时间点。

最终,sctp 是一个 std::chrono::system_clock::time_point 类型的对象,它表示文件的最后写入时间,但以系统时钟的时间点表示。

这段代码的目的是将文件的最后写入时间从文件系统时钟转换为系统时钟,以便能够使用 std::chrono 库的功能来处理时间点。这种转换在进行时间比较或计算时非常有用。

2.3 转换成系统时间

std::chrono::system_clock::to_time_t 是 C++ 标准库中 头文件提供的一个函数,它用于将 std::chrono::system_clock::time_point 类型的时间点转换为 time_t 类型。time_t 是一个在 头文件中定义的类型,用于表示自 1970 年 1 月 1 日以来的秒数。

  • std::chrono::system_clock::to_time_t 函数的用法和它的作用:

    • 用法
      time_t tt = std::chrono::system_clock::to_time_t(sctp);
      sctp 是一个 std::chrono::system_clock::time_point 类型的对象,表示一个具体的时间点。
    • 作用
      to_time_t 函数接受 sctp 作为参数,并将其转换为 time_t 类型的值,这个值是自 1970 年 1 月 1 日 00:00:00 UTC 至 sctp 表示的时间点的总秒数。
      这个转换非常有用,因为 time_t 类型是许多系统函数和库函数中常用的时间表示方式。例如,它可以用于 std::ctime 函数,将 time_t 转换为一个表示日期和时间的字符串。

请注意,std::chrono::system_clock::to_time_t 函数可能在某些情况下会抛出异常,如果 sctp 表示的时间点超出了 time_t 类型能够表示的范围。例如,如果 sctp 表示的时间早于 1970 年 1 月 1 日,或者晚于 time_t 类型的最大值(通常是 2038 年 1 月 19 日,取决于平台和编译器)。

三、完整代码

c++17 监控文件是否被修改

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux运维篇-yum命令报错 /lib64/libcurl.so.4相关
  • 【 亿邦动力网-注册安全分析报告】
  • ubuntu22.04 安装clamav并使用定时任务扫描
  • ubuntu下udp丢包
  • 关于换肤框架Android-skin-support的使用方法
  • Qt登录窗口设计
  • HTML 列表和容器元素——WEB开发系列10
  • 人工智能缺陷检测方案METIS(梅迪斯):汽车零部件检测
  • 我的世界 异地联机教程 无需公网IP、服务器
  • 利用EditPlus进行Json数据格式化
  • 机器学习系列—深入探索弗里德曼检验:非参数统计分析的利器
  • 3.MySQL面试题之Redis 和 Mysql 如何保证数据一致性?
  • 【人工智能】利用TensorFlow.js在浏览器中实现一个基本的情感分析系统
  • 将2,3,4,5,6,8分别填入算式“口口口X口口口“的“囗“中,怎么填使得算式结果最大。
  • 什么是视频比特率?与视频时长是什么关系
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [iOS]Core Data浅析一 -- 启用Core Data
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Javascript编码规范
  • java第三方包学习之lombok
  • Map集合、散列表、红黑树介绍
  • MobX
  • mongodb--安装和初步使用教程
  • React-Native - 收藏集 - 掘金
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 实现菜单下拉伸展折叠效果demo
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • nb
  • ionic入门之数据绑定显示-1
  • Nginx实现动静分离
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • !!Dom4j 学习笔记
  • # Java NIO(一)FileChannel
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #window11设置系统变量#
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (void) (_x == _y)的作用
  • (八)Flink Join 连接
  • (二)springcloud实战之config配置中心
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net6使用WebSocket与前端进行通信
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @Autowired和@Resource装配
  • @Import注解详解
  • @Transactional事务注解内含乾坤?
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [10] CUDA程序性能的提升 与 流