You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:19:37