【问题标题】:Windows and ctime / st_ctimeWindows 和 ctime / st_ctime
【发布时间】:2012-09-11 19:48:26
【问题描述】:

Windows 是否提供类似于 POSIX stat 的 st_ctime 字段的东西,它给出了最后一次元数据更改的时间戳?

背景:我有一些数据文件,我想检查它们是否自特定时间戳以来被修改过。检查修改后的时间戳 (mtime) 很容易,并且会处理“正常”修改,但如果用户复制旧版本的数据文件,那么修改后的时间戳将显示它们更旧。在 POSIX 系统上,复制旧文件会导致 ctime 更新,即使 mtime 更旧。

【问题讨论】:

    标签: windows filesystems stat


    【解决方案1】:

    据我所知,Windows确实提供了一个“最后更改”字段,但我没有找到任何 Win32 API 来访问它,所以你必须使用 Native API。

    具体来说:(我还没有实际尝试过。)

    使用本机 API 并不简单。 This question and answer 描述如何做到这一点。

    Cygwin 利用这一点在 Windows 下提供 POSIX 语义,正如 on their mailing list 所讨论的那样。我从their implementation 获取我的信息。

    虽然它只是切线相关,this article 对 Windows 确实存在的“创建”时间戳有很好的描述(不幸的是,它被称为 ctime)。如果将文件复制到新位置,则创建的时间戳可以比修改的时间戳更新(因为创建之后是指创建副本的时间,而修改是指上次修改原始文件的时间),否则不会更新元数据已更改。

    【讨论】:

    • 谢谢,是的,这就是 @piscisaureus 最终在 libuv 中所做的。 ctime 现在在 libuv 中使用 Unix 语义(又名“正确”)实现:github.com/joyent/libuv/commit/… 尽管这个答案是在我们找到它之后出现的,但还是奖励了赏金,因为您帮助未来的搜索者找到了正确的答案: )
    猜你喜欢
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 2012-07-16
    • 2013-01-12
    • 2012-05-18
    • 2016-07-05
    • 2012-05-01
    相关资源
    最近更新 更多