c++怎么按特定条件删除目录中的旧文件_last_write_time与时间差【实战】

酷墨同学_1936

酷墨同学_1936

2026-03-28

336人浏览

原创

c++oding="utf-8" ?>

std::filesystem::last_write_time返回file_time_type,需转system_clock::time_point再计算时差;c++20用to_sys(),c++17需平台适配;删旧文件应判>7*24h、捕获异常、过滤非普通文件并加写权限。

c++怎么按特定条件删除目录中的旧文件_last_write_time与时间差【实战】

用 std::filesystem::last_write_time 获取文件修改时间

Windows 和 Linux 下都能用,但返回值类型是 std::filesystem::file_time_type,不是秒数或 time_t,直接减会编译失败。必须先转成统一的时间基准(比如系统时钟),否则算不出天数差。

  • 别用 auto t = fs::last_write_time(p) 后直接减——类型不匹配,报错类似 no operator- matches these operands
  • 正确做法是转成 std::chrono::system_clock::time_point:用 fs::file_time_type::clock::to_sys(t)(C++20 起支持)
  • 老标准(C++17)没 to_sys,得靠平台适配:Windows 用 FileTimeToSystemTime,Linux 用 stat.st_mtim,不推荐手撸

计算「多久以前」要用 std::chrono::duration_cast 而非整数除法

时间点相减得到的是 duration,但默认单位是纳秒级,直接除 86400 得不到“天数”——可能因截断丢精度,尤其跨夏令时或闰秒区域更不准。

C++ Code Review Master
C++ Code Review Master

组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。

下载
  • 用 duration_cast<:hours>(tp_now - tp_file).count()</:hours> 比用秒再除安全
  • 删 7 天前的文件,建议判 > 7 * 24h,而不是 > 7d(std::chrono::days 在某些 libstdc++ 版本里有 bug)
  • 注意时区:system_clock::now() 是本地时区,last_write_time 在 NTFS 上存的是 UTC,但 to_sys 已自动处理,不用手动调时区

遍历目录时跳过子目录、只删普通文件

fs::recursive_directory_iterator 默认进子目录,一不留神就把整个子树删了;而 fs::is_regular_file 不检查是否可写,遇到只读文件会抛 permission_denied 异常。

  • 用 fs::directory_iterator(非 recursive)避免误入子目录
  • 加 if (fs::is_regular_file(it->status())) 过滤掉 .lnk、.dll、目录本身
  • 删之前先 fs::permissions(p, fs::perms::owner_write, fs::perm_options::add),防只读文件失败
  • 异常要捕获:fs::remove 失败不终止循环,否则一个文件出错,后面全跳过

完整删旧文件的最小可靠片段(C++20)

下面这段能跑通、不崩、不误删,覆盖常见坑:

namespace fs = std::filesystem;
namespace ch = std::chrono;
<p>auto now = ch::system_clock::now();
ch::hours cutoff = 7 * 24h;</p><p>for (const auto& it : fs::directory_iterator("/path/to/dir")) {
try {
if (!fs::is_regular_file(it->status())) continue;
auto ft = fs::last_write_time(it->path());
auto tp = fs::file_time_type::clock::to_sys(ft);
if (now - tp > cutoff) {
fs::permissions(it->path(), fs::perms::owner_write, fs::perm_options::add);
fs::remove(it->path());
}
} catch (const fs::filesystem_error&) { /<em> 忽略权限/忙文件 </em>/ }
}</p>

真正麻烦的不是逻辑,是 Windows 上 last_write_time 可能被索引服务篡改、Linux 上 ext4 的 time_granularity 导致同秒内多个文件时间一样——这些没法靠代码绕过,得接受“删得不够精确”这个事实。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.20

2628

5

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.26

3079

3

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.27

2638

6

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

2023.08.01

1448

3

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2419

5

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.08

3230

4

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

1517

3

windows boot manager
windows boot manager

windows boot manager无法开机的解决方法:1、系统文件损坏,使用Windows安装光盘或USB启动盘进入恢复环境,选择修复计算机,然后选择自动修复;2、引导顺序错误,进入恢复环境,选择命令提示符,输入命令"bootrec /fixboot"和"bootrec /fixmbr",然后重新启动计算机;3、硬件问题,使用硬盘检测工具进行扫描和修复;4、重装操作系统。本专题还提供其他解决

2023.08.28

2417

4

windows锁屏快捷键
windows锁屏快捷键

windows锁屏快捷键是Windows键+L、Ctrl+Alt+Del、Windows键+D、Windows键+P和Windows键+R。本专题为大家提供windows相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.30

4447

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Conan 2 Essentials 免费课程
Conan 2 Essentials 免费课程

共0课时 | 0人学习

CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习

Conan 2 高级依赖模型介绍
Conan 2 高级依赖模型介绍

共0课时 | 0人学习