如何将std :: filesystem :: file_time_type转换为time_t?

问题描述 投票:0回答:1

[我使用MSVC2015为Windows编写了一个解决方案,其中以下代码转换了std :: filesystem :: last_write_time结果time_t:

time_t ftime = std::file_time_type::clock::to_time_t(fs::last_write_time("/Path/filename"))

效果很好。然后,当我尝试使用gcc 9.3(-std = C ++ 2a)将解决方案移植到Linux时,出现以下错误:

错误:'to_time_t'不是'std :: chrono :: time_point :: clock'的成员{aka'std :: filesystem :: __ file_clock'}

我搜索了一个解决方案,但发现的结果基于cplusplus.com的std :: filesystem :: last_write_time示例中包含的解决方案。解决方案如下所示:

auto ftime = fs::last_write_time(p);
std::time_t cftime = decltype(ftime)::clock::to_time_t(ftime);

很遗憾,它对我不起作用。实际上,该示例有一条注释,说它不适用于MSVC(在MSVC2015上工作)或GCC 9; C ++ 20将允许便携式输出。

现在,我被卡住了。如何使用gcc进行此转换?

c++ chrono
1个回答
1
投票

在C ++ 20之前?没有便携式的方法可以做到这一点。它在Visual Studio的该版本中工作是因为VS的文件系统实现的该版本恰好使用system_clock作为文件系统时钟类型。这不是C ++标准所必需的,但是允许的。因此您的代码恰好可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.