如何在C++中获取指定时间段内创建的文件路径列表?
获取指定时间段内创建的文件路径列表的实现方法
嘿,刚好能帮到你!想找出指定时间段内创建的文件路径列表对吧?这里有两种常用的方法,一种是直接用系统命令快速搞定,另一种是在C++里自己实现,我给你详细说说:
一、用find命令快速实现
这是最省事的方式,不用写代码就能完成需求。你给出的示例命令就很实用,我拆解下每个参数的含义:
find ./* -mmin -2880 -mmin +1440
./:指定从当前目录开始递归搜索所有文件-mmin -2880:匹配修改时间在2880分钟以内的文件(2880分钟等于48小时)-mmin +1440:同时匹配修改时间超过1440分钟的文件(1440分钟等于24小时)
合起来这条命令就是找出24小时到48小时之间修改过的文件。要是你需要精准匹配创建时间,不同系统有不同参数:比如Linux可以用-cmin,macOS用-Bmin,把-mmin换成对应的参数就行。
二、在C++中实现的思路
如果要把这个功能集成到C程序里,核心步骤就是遍历目录、获取文件时间、对比筛选。下面给你一个C17及以上可用的示例框架,你可以根据自己的系统和需求调整:
#include <filesystem> #include <vector> #include <chrono> #include <iostream> namespace fs = std::filesystem; // 获取指定目录下,修改时间在[older_than, newer_than]之间的文件路径 std::vector<fs::path> get_files_in_time_range(const fs::path& dir, std::chrono::minutes older_than, std::chrono::minutes newer_than) { std::vector<fs::path> matched_files; auto current_time = std::chrono::system_clock::now(); // 递归遍历目录下的所有文件 for (const auto& entry : fs::recursive_directory_iterator(dir)) { // 只处理普通文件,跳过目录、链接等 if (!entry.is_regular_file()) continue; // 获取文件的最后修改时间 auto file_write_time = fs::last_write_time(entry); // 转换为系统时钟的时间点,方便计算时间差 auto file_time_point = std::chrono::time_point_cast<std::chrono::system_clock::duration>( file_write_time - fs::file_time_type::clock::now() + current_time ); auto time_since_modified = current_time - file_time_point; // 判断是否在目标时间范围内 if (time_since_modified > older_than && time_since_modified < newer_than) { matched_files.push_back(entry.path()); } } return matched_files; } int main() { // 查找当前目录下,修改时间在24小时到48小时之间的文件 auto target_files = get_files_in_time_range("./", std::chrono::minutes(1440), std::chrono::minutes(2880)); for (const auto& file_path : target_files) { std::cout << file_path << std::endl; } return 0; }
小提示:
- 上面的代码用
last_write_time获取的是文件修改时间,如果要获取创建时间,不同系统的处理略有不同:Linux和macOS可以用fs::status(entry).birth_time()(需要系统内核支持),Windows下可以调用系统APIGetFileTime来获取创建时间。 - 时间转换部分是为了兼容不同的时钟类型,
std::filesystem的文件时间时钟和系统时钟可能不一致,所以需要做转换。
内容的提问来源于stack exchange,提问作者satomacoto
相关产品推荐
相关产品推荐

