# std::filesystem::last_write_time

< cpp‎ | filesystem

定义于头文件 `<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 stat 的 `st_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

### 参阅

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