As of C++20, the std::filesystem
library does not provide a direct way to get the creation time of a file. However, you can get the last write time using the last_write_time()
 function.
File creation time may not be supported by all filesystems, which is one reason it is not part of the standard library. Here’s how you can get the last write time:
#include <chrono>
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main() {
using namespace std::chrono;
fs::path file_path{R"(c:\test\hello.txt)"};
try {
auto ftime = fs::last_write_time(file_path);
auto sctp =
time_point_cast<system_clock::duration>(
ftime - fs::file_time_type::clock::now()
+ system_clock::now()
);
std::time_t cftime =
system_clock::to_time_t(sctp);
std::cout << "Last write time: "
<< std::asctime(std::localtime(&cftime));
} catch (fs::filesystem_error &e) {
std::cerr << e.what() << '\\n';
}
}
Last write time: Mon Jun 10 16:54:01 2024
In this example:
file_path
as the path to the file whose last write time we want to retrieve.fs::last_write_time()
to get the file’s last write time, which returns a file_time_type
.file_time_type
to a system_clock::time_point
and finally to a std::time_t
to print it in a human-readable format.If you need to access the creation time and your operating system supports it, you might need to use platform-specific APIs.
For example, on Windows, you can use the GetFileTime()
function from the Windows API to retrieve the creation time. Here’s a brief example using Windows API:
#include <windows.h>
#include <iostream>
void print_file_creation_time(
const std::wstring &file_path) {
HANDLE file_handle =
CreateFileW(
file_path.c_str(),
GENERIC_READ,
FILE_SHARE_READ,
nullptr,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
nullptr
);
if (file_handle == INVALID_HANDLE_VALUE) {
std::cerr << "Failed to open file\n";
return;
}
FILETIME creation_time;
if (GetFileTime(
file_handle,
&creation_time,
nullptr,
nullptr
)) {
SYSTEMTIME st;
FileTimeToSystemTime(&creation_time, &st);
std::cout << "Creation time: "
<< st.wYear << '/'
<< st.wMonth << '/'
<< st.wDay << ' '
<< st.wHour << ':'
<< st.wMinute << ':'
<< st.wSecond << '\n';
} else {
std::cerr << "Failed to get file time\n";
}
CloseHandle(file_handle);
}
int main() {
print_file_creation_time(L"c:\\test\\hello.txt");
}
Creation time: 2023/6/10 23:10:33
This example uses the Windows API to open a file, retrieve its creation time, convert it to SYSTEMTIME
, and print it.
Always consider the portability of your code. Using platform-specific APIs reduces portability but might be necessary for features not supported by the standard library.
Answers to questions are automatically generated and may not have been reviewed.
Create, delete, move, and navigate through directories and files using the standard library's filesystem
module.