【问题标题】:C++: How to modify a files 'created' timestamp?C++:如何修改文件“创建”的时间戳?
【发布时间】:2023-03-19 14:01:01
【问题描述】:

我需要修改文件的“已创建”(如果存在)、“已修改”和“已访问”时间戳。理想情况下,这将是一个独立于平台的解决方案。

我查看了 boost 库,但看不到任何相关内容。我发现最接近相关内容的是this for Windows。

有人可以帮忙吗?谢谢。

【问题讨论】:

  • 这是 Unix 管理员的经典面试问题,“如何查看文件创建时间戳?”。答案是:根本没有。

标签: c++ boost boost-filesystem


【解决方案1】:

我从未使用过它们,但我猜你正在寻找属性函数:
http://www.boost.org/doc/libs/1_44_0/libs/filesystem/v2/doc/reference.html#Attribute-functions

还有最后修改的函数:

template <class Path> std::time_t last_write_time(const Path& p);
template <class Path> void last_write_time(const Path& p, const std::time_t new_time);

【讨论】:

  • 注意:第二个将设置最后修改时间,以防万一。
  • 这个答案如何帮助修改“创建”标志时间?
  • @killdaclick afaik 在 boost 中没有提供创建时间的功能。我认为,如果您愿意,则必须为支持的平台编写具有不同实现的自己的函数
  • 可能是因为 *nix 平台不存在创建时间。
【解决方案2】:

Another,Windows 上稍微简单的代码 sn-p。

【讨论】:

    【解决方案3】:

    使用utime 函数和utimbuf 结构。该方法在 Windows 中可用,但以 _utime 开头的下划线命名。

    更新:utime 只允许您更改访问修改时间(通过utimbufactimemodtime字段)。这很可能是因为许多 Unix 风格的文件系统不会在任何地方记录创建时间

    【讨论】:

      【解决方案4】:

      并非所有流行的文件系统都支持“创建”和“访问”时间戳:http://en.wikipedia.org/wiki/Comparison_of_file_systems#Metadata

      Windows 文件系统可以,但如果您需要可移植性,现在依赖它们可能不是一个好主意。看着那张表,我觉得有一种趋势是在较新的文件系统中添加对它们的支持。

      【讨论】:

        猜你喜欢
        • 2012-09-11
        • 2012-12-22
        • 1970-01-01
        • 1970-01-01
        • 2018-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多