std::filesystem::last_write_time

来自cppreference.com
 
 
 
在标头 <filesystem> 定义
std::filesystem::file_time_type last_write_time(const std::filesystem::path& p);

std::filesystem::file_time_type last_write_time(const std::filesystem::path& p,

                                                std::error_code& ec)
(1) (C++17 起)
void last_write_time(const std::filesystem::path& p,

                     std::filesystem::file_time_type new_time);
void last_write_time(const std::filesystem::path& p,
                     std::filesystem::file_time_type new_time,

                     std::error_code& ec);
(2) (C++17 起)
1) 返回 p 的最后修改时间,如同通过访问 POSIX statst_mtime 确定(跟随符号链接) 不抛出重载在错误时返回 file_time_type::min()
2) 更改 p 的最后修改时间,如同用 POSIX futimens (跟随符号链接)

参数

p - 要检验或修改的路径
new_time - 新的修改时间
ec - 不抛出重载中报告错误的输出参数

返回值

1) p 的最后修改时间
2) (无)

异常

不接受 std::error_code& 参数的重载在底层 OS API 错误时抛出 filesystem_error ,以第一 path 参数 p 和作为错误码参数的 OS 错误码构造。若 OS API 调用失败,则接受 std::error_code& 参数的重载设置该参数为 OS API 错误码,而若不出现错误则执行 ec.clear() 。若内存分配失败,则任何不标记为 noexcept 的重载可能抛出 std::bad_alloc

注意

不保证在设置写入时间后, (1) 的返回值立即等于传递给 (2) 的参数,因为文件系统时间可能比 file_time_type 更为颗粒化。

示例

#include <iostream>
#include <chrono>
#include <iomanip>
#include <fstream>
#include <filesystem>
 
using namespace std::chrono_literals;
int main()
{
    auto p = std::filesystem::temp_directory_path() / "example.bin";
    std::ofstream(p.c_str()).put('a'); // 创建文件
 
    auto print_last_write_time = [](std::filesystem::file_time_type const& ftime) {
        std::time_t cftime = std::chrono::system_clock::to_time_t(
            std::chrono::file_clock::to_sys(ftime));
        std::cout << "File write time is " << std::asctime(std::localtime(&cftime));
    };
 
    auto ftime = std::filesystem::last_write_time(p);
    print_last_write_time(ftime);
 
    std::filesystem::last_write_time(p, ftime + 1h); // 向未来移动文件时间 1 小时
    ftime = std::filesystem::last_write_time(p); // 从文件系统回读
    print_last_write_time(ftime);
 
    std::filesystem::remove(p);
}

可能的输出:

File write time is Sun May  9 23:29:58 2021
File write time is Mon May 10 00:29:58 2021

参阅

表示文件时间值
(typedef)
获取或设置 directory_entry 所代表的文件的最后数据修改时间
(std::filesystem::directory_entry 的公开成员函数)