如何检测文件是否被覆盖?

时间:2010-11-18 18:35:51

标签: c++ c file io

在我的C / C ++程序中,我需要检查我读过的文件是否已被覆盖(其inode已更改或添加了一些新行)。如果我现在错了fstat并且fstat64只有在我使用Linux而不是用于Windows时才有用。是否有任何通用(适用于复杂的操作系统)方式来做到这一点?还能告诉我这是如何使用fstat64的吗?

2 个答案:

答案 0 :(得分:5)

您可以跟踪上次写入文件的时间,以了解文件是否已被修改。跨平台解决方案使用boost :: filesystem。 Windows没有fstat64 AFAIK。

http://www.boost.org/doc/libs/1_44_0/libs/filesystem/v2/doc/index.htm

http://rosettacode.org/wiki/File_modification_time#C.2B.2B

#include <boost/filesystem/operations.hpp>
#include <ctime>
#include <iostream>

int main( int argc , char *argv[ ] ) {
   if ( argc != 2 ) {
      std::cerr << "Error! Syntax: moditime <filename>!\n" ;
      return 1 ;
   }
   boost::filesystem::path p( argv[ 1 ] ) ;
   if ( boost::filesystem::exists( p ) ) {
      std::time_t t = boost::filesystem::last_write_time( p ) ;
      std::cout << "On " << std::ctime( &t ) << " the file " << argv[ 1 ] 
     << " was modified the last time!\n" ;
      std::cout << "Setting the modification time to now:\n" ;
      std::time_t n = std::time( 0 ) ;
      boost::filesystem::last_write_time( p , n ) ; 
      t = boost::filesystem::last_write_time( p ) ;
      std::cout << "Now the modification time is " << std::ctime( &t ) << std::endl ;
      return 0 ;
  } else {
      std::cout << "Could not find file " << argv[ 1 ] << '\n' ;
      return 2 ;
  }

}

答案 1 :(得分:0)

我没有适合您的代码示例,但是您可以检查文件的上次修改时间,而不是第一次打开时的情况吗?

修改

找到了一个非常好的片段,似乎可以解决这个问题

http://www.jb.man.ac.uk/~slowe/cpp/lastmod.html