13#if defined(RESTINIO_ASIO_HAS_WINDOWS_OVERLAPPED_PTR)
51 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
57 fmt::format(
"unable to openfile '{}': error({})", file_path, GetLastError() ) };
60 return file_descriptor;
64template <
typename META >
69 std::chrono::system_clock::time_point flastmodified;
73 LARGE_INTEGER file_size;
75 if( GetFileSizeEx( fd, &file_size ) )
77 fsize =
static_cast< file_size_t >( file_size.QuadPart );
82 fmt::format(
"unable to get file size: error code:{}", GetLastError() ) };
86 if( GetFileTime( fd, NULL, NULL, &ftWrite ) )
91 constexpr std::uint64_t nanosec100_in_microsec = 10;
92 constexpr std::uint64_t epoch_difference_in_microsec =
93 11644473600ULL * 1000 *1000;
98 ull.LowPart = ftWrite.dwLowDateTime;
99 ull.HighPart = ftWrite.dwHighDateTime;
102 std::chrono::system_clock::time_point{
103 std::chrono::microseconds(
104 ull.QuadPart / nanosec100_in_microsec - epoch_difference_in_microsec ) };
110 "unable to get file last modification: error code:{}",
115 return META{ fsize, flastmodified};
constexpr file_descriptor_t null_file_descriptor()
Get file descriptor which stands for null.
std::uint64_t file_size_t
void close_file(file_descriptor_t fd)
Close file by its descriptor.
std::int64_t file_offset_t
std::FILE * file_descriptor_t
file_descriptor_t open_file(const char *file_path)
Open file.
META get_file_meta(file_descriptor_t fd)
Get file size.