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