gpt4 book ai didi

c++ - 仅使用标准库设置文件创建时间

转载 作者:可可西里 更新时间:2023-11-01 18:38:12 28 4
gpt4 key购买 nike

C++17 包含一个新的可移植 API,用于处理文件系统 (<filesystem>)。

我的程序解压一个文件。此存档包含文件、目录和每个文件的创建时间。使用新的 API,我有一个用于创建目录的可移植解决方案 ( std::filesystem::create_directories ),我正在使用 std::ofstream用于创建文件。

我可以使用新的 API 来设置文件创建(或修改)时间吗?

编辑:时间,由归档提供 - 它是秒,从 1970.01.01 00:00:00(UNIX 纪元时间)开始

最佳答案

您问题的答案……很复杂。因为 C++ 必须是 C++。

从技术角度来说,答案是肯定的:std::filesystem::last_write_time can be used to set the last time of writing for the file .

在更现实的意义上,答案不正确的原因是因为 last_write_timestd::filesystem::file_time_type 作为其时间。这是有问题的。

看,这个时间点的纪元(构成 0 时间的时间)是......实现定义的。它可能是 UNIX 时间(零是 1970 年 1 月 1 日 00:00:00)。或者它可能是其他东西。

因为它是实现定义的,所以没有办法可移植相对于某个已知纪元(例如,存档中的时间)来计算秒/分钟/天/等) 转换成 std::filesystem::file_time_type,只是因为您不知道如何说 file_time_type。您真正能做的唯一一件事是使用现有的 file_time_type 值并按任意时间计数调整它们(或通过 file_time_type::clock::now() 将其设置为当前时间) )。但是您不能将文件的时间设置为某个已知的绝对日期/时间。

幸运的是,C++20 填补了这个漏洞。 system_clock 将被要求在 UNIX 时间上运行,并且 file_time_type 将被要求能够是 std::chrono::clock_casted从/到可以转换为 system_clock 时间的任何类型。

但在那之前,last_write_time 几乎没有它应有的那么有用......

关于c++ - 仅使用标准库设置文件创建时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56615293/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com