首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::filesystem::last_write_time到FILETIME

std::filesystem::last_write_time到FILETIME
EN

Stack Overflow用户
提问于 2022-05-19 19:21:54
回答 1查看 212关注 0票数 2

我试图将文件的FILETIME发送到我的服务器,服务器是用C#编写的。从这里,我可以使用函数DateTime.FromFileTime()来解析文件的时间。我知道有一个名为Win32 API的GetFileTime(),但是为了保存代码行,我想知道是否可以使用std::filesystem并以某种方式将其转换为FILETIME

我试过这样做:

代码语言:javascript
复制
f.lastwrite = entry.last_write_time();

但不幸的是,这个演员是不允许的。是否有可能将last_write_time()转换为FILETIME,以便将其发送出去,还是不可能?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-19 19:51:21

您可以通过last_write_time()std::chrono::system_clock::to_time_t(),然后通过convert time_t to FILETIME using simple arithmeticstd::chrono::file_clock::to_sys()值转换为std::chrono::system_clock::to_time_t()

例如:

代码语言:javascript
复制
#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(),它可以检索给定文件路径字符串而不是打开的文件HANDLEFILETIME ftLastWriteTime (以及其他事情),就像GetFileTime()一样。

代码语言:javascript
复制
#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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72310048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档