最終更新日時(UTC):
が更新

履歴 編集

function
<filesystem>

std::filesystem::last_write_time(C++17)

namespace std::filesystem {
  file_time_type last_write_time(const path& p);                // (1)
  file_time_type last_write_time(const path& p,
                                 std::error_code& ec) noexcept; // (2)

  void last_write_time(const path& p, file_time_type new_time); // (3)
  void last_write_time(const path& p, file_time_type new_time,
                       std::error_code& ec) noexcept;           // (4)
}

概要

エンティティの最終更新日を取得・更新する。

  • (1), (2) : 最終更新日時を取得する
  • (3), (4) : 最終更新日時を更新する

効果

  • (1), (2) : パスpが指すエンティティのデータが最後に変更された時間を返す
    • POSIX環境ではstat()関数によって返されるst_mtimeメンバを使用する
    • (2) : エラーが発生した場合は、ecにエラー情報が設定され、file_time_type::min()が返る
  • (3), (4) : パスpのエンティティに、最終更新日時としてnew_timeを設定する
    • POSIX環境ではfutimens()関数を使用する
    • この関数を実行した結果として、last_write_time(p) == new_timeとなることは保証されない。これはOSのファイルシステムの制限による
    • (4) : エラーが発生した場合は、ecにエラー情報が設定される

例外

#include <iostream>
#include <fstream>
#include <filesystem>
#include <ctime>
#include <iomanip>

namespace fs = std::filesystem;

void print_datetime(const char* name, fs::file_time_type tp)
{
  namespace chrono = std::chrono;
  auto sec = chrono::duration_cast<chrono::seconds>(tp.time_since_epoch());

  std::time_t t = sec.count();
  const std::tm* lt = std::localtime(&t);
  std::cout << name << " : " << std::put_time(lt, "%c") << std::endl;
}

int main()
{
  std::ofstream{"regular.txt"};
  fs::create_directory("dir");

  // ファイル・ディレクトリの最終更新日時を取得
  fs::file_time_type file_time = fs::last_write_time("regular.txt");
  fs::file_time_type dir_time = fs::last_write_time("dir");

  print_datetime("file time", file_time);
  print_datetime("dir time", dir_time);

  // ファイルの最終更新日時として、現在日時を設定
  fs::last_write_time("regular.txt", fs::file_time_type::clock::now());
}

出力例

file time : Fri Jun 15 14:19:03 2018
dir time : Fri Jun 15 14:19:03 2018

バージョン

言語

  • C++17

処理系