如何确定何时用c ++更新文件?

时间:2011-07-27 11:50:32

标签: c++ file timestamp

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

  1. 文件Y和Z已存在且文件X未更新,因此不应覆盖它。
  2. 文件X已更新,然后必须覆盖文件Y和Z.
  3. 代码是用c ++编写的,如何更改代码以满足这两个条件?我应该每次都带X的时间戳吗?

7 个答案:

答案 0 :(得分:2)

如果您使用POSIX计算机,请使用stat或相关功能,例如fstat。 Windows等价物在http://msdn.microsoft.com/en-us/library/14h5k7ff(v=vs.80).aspx描述。

stat或Windows对应方返回的结构有一个字段,表示上次修改文件的时间。

答案 1 :(得分:1)

对于便携式解决方案,Boost.Filesystem有last_write_time,它将上次修改的时间作为std::time_t返回。

答案 2 :(得分:0)

你可以保留文件X的哈希。如果有更改,文件已经更改(更新),你需要更新Y和Z.

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

使用David Hammen的答案,将X的修改时间戳与Y和Z进行比较,如果X被修改为晚于Y或Z - 那么它们已经过时并且应该被重写

答案 5 :(得分:0)

另一种可能性:用X编写基本程序,总是覆盖Y和Z.用make调用基本程序。一个看起来像的文件:

Y Z : X
    basicProgram X Y Z

应该做的伎俩。然后,您可以使用“make Y”或“make Z”调用它 底线:让我们担心时间戳等。

答案 6 :(得分:0)

请注意,在检查上次更新时间时,有some limitations

  

...在某些文件系统上,[时间]分辨率低至一小时...在程序执行过程中,系统时钟可能由其他可能自动的过程设置为新值...