Windows和ctime/st\ctime

Windows和ctime/st\ctime,windows,filesystems,stat,Windows,Filesystems,Stat,Windows是否提供类似于POSIX的st_ctime字段的内容,该字段给出最后一次元数据更改的时间戳 背景:我有一些数据文件,我想检查它们是否在特定的时间戳之后被修改过。检查修改的时间戳(mtime)很容易,并且会处理“正常”的修改,但是如果用户复制了较旧版本的数据文件,那么修改的时间戳将显示它们较旧。在POSIX系统上,复制较旧的文件会导致ctime更新,即使mtime较旧。据我所知,Windows确实提供了“上次更改”字段,但我没有找到任何用于访问它的Win32 API,因此您必须使用本

Windows是否提供类似于POSIX的st_ctime字段的内容,该字段给出最后一次元数据更改的时间戳


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

据我所知,Windows确实提供了“上次更改”字段,但我没有找到任何用于访问它的Win32 API,因此您必须使用本机API

具体地说:(我还没有试过这个。)

  • 打电话来处理
  • 使用
    FileNetworkOpenInformation
    FileInformationClass
    参数调用,以获取
    FILE\u NETWORK\u OPEN\u INFORMATION
    结构
  • 结构的
    ChangeTime
    成员相当于POSIX ctime
使用本机API并不十分简单。描述如何做

如前所述,利用这一点在Windows下提供POSIX语义。我是从你那里得到信息的


尽管它只是一个相切的关系,但它很好地描述了Windows提供的“创建”时间戳(不幸的是,它被称为ctime)。如果将文件复制到新位置,则创建的时间戳可能比修改的时间戳新(因为创建时指的是创建副本的时间,而修改时指的是上次修改原始文件的时间),但在元数据更改时,它不会更新。

谢谢,是的,这就是@piscisaureus在libuv中所做的。ctime现在在libuv中使用Unix语义(也称为“正确”)实现:尽管这个答案是在我们已经找到它之后才出现的,但我们还是获得了奖金,因为您已经帮助未来的搜索者找到了正确的答案:)