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
処理系
- Clang: 7.0 ✅
- GCC: 8.1 ✅
- Visual C++: