如何在c++中确定文件何时更新

How to determine when a file is updated in c++?

本文关键字:文件 何时 更新 c++      更新时间:2023-10-16

我正在使用一个应用程序,该应用程序将文件X作为输入,并将文件Y和Z作为输出(图形和绘图)
现在,如果应用程序再次运行:

  1. 文件Y和Z已经存在,文件X没有更新,那么不应该覆盖。
  2. 文件X被更新,那么文件Y和Z必须被覆盖。

代码是用c++编写的,我如何修改代码以满足两个条件?每次都要带X的时间戳吗?

如果您在POSIX机器上,则使用statfstat等相关函数。windows版本的等价描述见http://msdn.microsoft.com/en-us/library/14h5k7ff(v=vs.80).aspx。

stat或windows对应的结构体返回一个字段,表示文件最后修改的时间

对于可移植的解决方案,Boost。

文件系统有last_write_time,它返回最后一次修改的时间作为std::time_t

您可以只保留文件x的散列。如果更改,则文件已更改(更新),并且您将需要更新Y和z。

if (XHashPrev != XHashNow || !YZExist)
    // update files.

使用David Hammen的答案,比较X与Y和Z的修改时间戳,如果X被修改晚于Y或Z -所以它们是过时的,应该重写

是的,您应该检查文件X并看到(两个选项):

  • 更新日期更改或
  • 或者如果它的内容发生了变化(以CRC32为例)。

第一个是最简单和最快的。第二个是最准确的。
进一步编辑下面的注释:这两个选项可以结合起来达成一个妥协。

另一种可能性:用X总是覆盖Y和z来编写基本程序。一个makefile看起来像:

Y Z : X
    basicProgram X Y Z

就可以了。然后你可以用"make Y"或"make Z"来调用它底线:让我们担心时间戳之类的。

请注意,在检查上次更新时间时,有一些限制:

…在某些文件系统上,[时间]分辨率低至一小时……在程序执行期间,系统时钟可能被其他进程(可能是自动的)设置为一个新值。