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

履歴 編集

type-alias
<filesystem>

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

namespace std::filesystem {
  using file_time_type = chrono::time_point<実装定義のクロック型>; // (1) C++17
  using file_time_type = chrono::time_point<chrono::file_clock>;   // (1) C++20
}

概要

ファイル情報で使用する時間の型。

時間の分解能はOS依存。

備考

  • C++17とC++20では標準ライブラリの実装によって、この型をstd::time_t型に変換する方法が異なる場合がある

C++17での使用例

#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 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++20での使用例

#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;
  chrono::sys_time st = chrono::file_clock::to_sys(tp);

  std::time_t t = chrono::system_clock::to_time_t(st);
  const 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 : Wed Jul 15 23:08:06 2020
dir time : Wed Jul 15 23:08:06 2020

バージョン

言語

  • C++17

処理系

関連項目