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>
namespace fs = std::filesystem;
using namespace std::chrono_literals;
int main()
{
    fs::path p = fs::current_path() / "example.bin";
    std::ofstream(p.c_str()).put('a'); // 创建文件
    auto ftime = fs::last_write_time(p);
 
    std::time_t cftime = decltype(ftime)::clock::to_time_t(ftime);
 
    // 对此演示假定为 system_clock
    // 注意: MSVC 上非真; C++20 将允许可移植的输出
    std::time_t cftime = decltype(ftime)::clock::to_time_t(ftime);
    std::cout << "File write time is " << std::asctime(std::localtime(&cftime)) << '\n';
 
    fs::last_write_time(p, ftime + 1h); // 向未来移动文件写入时间 1 小时
    ftime = fs::last_write_time(p); // 从文件系统回读
 
    cftime = decltype(ftime)::clock::to_time_t(ftime);
    std::cout << "File write time is " << std::asctime(std::localtime(&cftime)) << '\n';
    fs::remove(p);
}

可能的输出:

File write time is Tue Mar 31 19:47:04 2015
 
File write time is Tue Mar 31 20:47:04 2015

[编辑] 参阅

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