std::filesystem::last_write_time(3)

NAME
std::filesystem::last_write_time - std::filesystem::last_write_time

Synopsis
   Defined in header <filesystem>
   std::filesystem::file_time_type last_write_time(const
   std::filesystem::path& p);
   std::filesystem::file_time_type last_write_time(const (1) (since C++17)
   std::filesystem::path& p,
   std::error_code& ec) noexcept;
   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, (2) (since C++17)
   std::filesystem::file_time_type new_time,
   std::error_code& ec) noexcept;
   1) Returns the time of the last modification of p, determined as if by accessing the
   member st_mtime of the POSIX stat (symlinks are followed). The non-throwing overload
   returns file_time_type::min() on errors.
   2) Changes the time of the last modification of p, as if by POSIX futimens (symlinks
   are followed).

Parameters
   p - path to examine or modify
   new_time - new modification time
   ec - out-parameter for error reporting in the non-throwing overload

Return value
   1) The time of the last modification of p
   2) (none)

Exceptions
   The overload that does not take a std::error_code& parameter throws
   filesystem::filesystem_error on underlying OS API errors, constructed with p as the
   first path argument and the OS error code as the error code argument. The overload
   taking a std::error_code& parameter sets it to the OS API error code if an OS API
   call fails, and executes ec.clear() if no errors occur. Any overload not marked
   noexcept may throw std::bad_alloc if memory allocation fails.

Notes
   It is not guaranteed that immediately after setting the write time, the value
   returned by (1) is the same as what was passed as the argument to (2) because the
   file system's time may be more granular than filesystem::file_time_type.

Example
// Run this code
 #include <chrono>
 #include <filesystem>
 #include <format>
 #include <fstream>
 #include <iostream>
 using namespace std::chrono_literals;
 int main()
 {
     auto p = std::filesystem::temp_directory_path() / "example.bin";
     std::ofstream(p.c_str()).put('a'); // create file
     std::filesystem::file_time_type ftime = std::filesystem::last_write_time(p);
     std::cout << std::format("File write time is {}\n", ftime);
     std::filesystem::last_write_time(p, ftime + 1h); // move file write time 1 hour to the future
     ftime = std::filesystem::last_write_time(p); // read back from the filesystem
     std::cout << std::format("File write time is {}\n", ftime);
     std::filesystem::remove(p);
 }

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

See also
   file_time_type represents file time values
   (C++17) (typedef)
                   gets or sets the time of the last data modification of the file to
   last_write_time which the directory entry refers
                   (public member function of std::filesystem::directory_entry)