如何在c++中确定文件何时更新
How to determine when a file is updated in c++?
我正在使用一个应用程序,该应用程序将文件X作为输入,并将文件Y和Z作为输出(图形和绘图)
现在,如果应用程序再次运行:
- 文件Y和Z已经存在,文件X没有更新,那么不应该覆盖。
- 文件X被更新,那么文件Y和Z必须被覆盖。
代码是用c++编写的,我如何修改代码以满足两个条件?每次都要带X的时间戳吗?
如果您在POSIX机器上,则使用stat
或fstat
等相关函数。windows版本的等价描述见http://msdn.microsoft.com/en-us/library/14h5k7ff(v=vs.80).aspx。
stat
或windows对应的结构体返回一个字段,表示文件最后修改的时间
对于可移植的解决方案,Boost。
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"来调用它底线:让我们担心时间戳之类的。
请注意,在检查上次更新时间时,有一些限制:
…在某些文件系统上,[时间]分辨率低至一小时……在程序执行期间,系统时钟可能被其他进程(可能是自动的)设置为一个新值。
相关文章:
- 何时需要 #include .cpp 文件?
- cmake - 何时在 CMakeLists.txt 文件中包含include_directories
- Clang - 检测头文件何时完成
- 何时使用多个CPP文件(良好的编码实践)
- 何时需要使用静态库的头文件?
- 如何知道何时将新文件添加到 Windows 中的文件系统
- 即使我们有.h文件,C 何时包含CPP
- inotify 的替代方法,用于检测何时在文件夹下创建新文件
- 确定何时更改单个文件
- 我如何有效地清理此程序并仍然检测文件输入何时不是字母
- feof()实际上是如何知道何时到达文件末尾的
- C++类对象文件何时编译
- 何时使用 .hpp 文件
- 何时在带有头文件和目标文件的类方法中使用“inline”关键字
- 对于文件读取,何时使用 filebuf
- 如何知道何时编辑文件
- 文件描述符的值何时变得"-1"?
- C++/C检测文件夹内容何时更改并通过HTTP发送文件的最佳方式
- 如何在c++中确定文件何时更新
- 是否可以判断C++文件何时是主源文件