我试图将文件的FILETIME发送到我的服务器,服务器是用C#编写的。从这里,我可以使用函数DateTime.FromFileTime()来解析文件的时间。我知道有一个名为Win32 API的GetFileTime(),但是为了保存代码行,我想知道是否可以使用std::filesystem并以某种方式将其转换为FILETIME。
我试过这样做:
f.lastwrite = entry.last_write_time();但不幸的是,这个演员是不允许的。是否有可能将last_write_time()转换为FILETIME,以便将其发送出去,还是不可能?
发布于 2022-05-19 19:51:21
您可以通过last_write_time()和std::chrono::system_clock::to_time_t(),然后通过convert time_t to FILETIME using simple arithmetic将std::chrono::file_clock::to_sys()值转换为std::chrono::system_clock::to_time_t()。
例如:
#include <windows.h>
#include <filesystem>
#include <chrono>
void stdFileTimeType_to_FILETIME(const std::filesystem::file_time_type &ftime, FILETIME &ft)
{
std::time_t t = std::chrono::system_clock::to_time_t(
std::chrono::file_clock::to_sys(ftime)
);
ULARGE_INTEGER ul;
ul.QuadPart = (t * 10000000LL) + 116444736000000000LL;
ft.dwLowDateTime = ul.LowPart;
ft.dwHighDateTime = ul.HighPart;
}
FILETIME lastwrite;
stdFileTimeType_to_FILETIME(entry.last_write_time(), lastwrite);更新:或者,可以查看GetFileAttributesEx(),它可以检索给定文件路径字符串而不是打开的文件HANDLE的FILETIME ftLastWriteTime (以及其他事情),就像GetFileTime()一样。
#include <windows.h>
#include <filesystem>
#include <chrono>
void getLastWriteTime_as_FILETIME(const std::filesystem::path &filePath, FILETIME &ft)
{
WIN32_FILE_ATTRIBUTE_DATA fad;
if (GetFileAttributesExW(path.c_str(), GetFileExInfoStandard, &fad))
ft = fad.ftLastWriteTime;
else
ft.dwLowDateTime = ft.dwHighDateTime = 0;
}
FILETIME lastwrite;
getLastWriteTime_as_FILETIME(entry.path(), lastwrite);https://stackoverflow.com/questions/72310048
复制相似问题