Как определить, был ли файл перезаписан ?, - PullRequest
0 голосов
/ 18 ноября 2010

В моей программе на C / C ++ мне нужно проверить, был ли файл из того, что я прочитал, перезаписан (был изменен его индекс или добавлены новые строки). Если я сейчас ошибаюсь, fstat и fstat64 могут быть полезны только тогда, когда я использую Linux, но не для Windows. Есть ли какой-нибудь универсальный (для работы на сложных ОС) способ сделать это? А также можете ли вы сказать мне, как это сделать с помощью fstat64?

Ответы [ 2 ]

5 голосов
/ 18 ноября 2010

Вы можете отслеживать, когда файл последний раз записывался, чтобы знать, был ли он изменен. Кроссплатформенное решение использует 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 ;
  }

}

0 голосов
/ 18 ноября 2010

У меня нет для вас образца кода, но можете ли вы сравнить время последнего изменения файла с тем, что было при первом его открытии?

Редактировать

Найден довольно хороший фрагмент кода, который, кажется, делает свое дело

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...