2010-12-01 17 views
5

quiero verificar un archivo para ver si ha sido cambiado y si lo está, luego cargarlo de nuevo ... para esto, comencé con el siguiente código que no me está llevando a ninguna parte ...Marca de tiempo del archivo en C++

#include <sys/types.h> 
#include <sys/stat.h> 
#include <unistd.h> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    struct stat st; 
    int ierr = stat ("readme.txt", &st); 
    if (ierr != 0) { 
      cout << "error"; 
    } 
    int date = st.st_mtime; 
    while(1){ 
      int newdate = st.st_mtime; 
      usleep(500000); 
      if (newdate==date){ 
        cout << "same file.. no change" << endl; 
      } 
      else if (newdate!=date){ 
        cout << "file changed" << endl; 
      } 
    } 
} 

todo lo que el código hace es imprimir el mismo archivo ... no cambia continuamente.

+0

'si (== NewDate fecha) {...} else if (NewDate! = Fecha) {...}' Creo que es porque hay una tercera posibilidad aquí;) – ybungalobill

Respuesta

9

Eso es porque está llamando al stat() fuera del circuito.

El resultado de stat() es correcto en ese momento particular. necesita llamar a stat() nuevamente cada vez que quiera verificarlo.

+0

: D ROTFL ... Perdón por eso ... gracias .. –

2

Bueno, usted stat antes del ciclo. La información que obtiene por su stat inicial nunca se actualiza. Mueva la llamada al stat en el bucle while.

0

Si está en Linux y escribe específicamente para esa plataforma, puede utilizar inotify para informarle cuando un archivo cambia en lugar de sondearlo continuamente.

Ver hombre inotify para ver cómo se usa.

0

sí, tiene que mover la llamada stat en el ciclo while. el bucle while debería tener este aspecto

while(1){ 
    ierr = stat ("/Volumes/Backup/song.rtf", &st); 
    int newdate = st.st_mtime; 
    usleep(500000); 
    if (newdate==date){ 
     cout << "same file.. no change" << endl; 
    } 
    else if (newdate!=date){ 
     cout << "file changed" << endl; 
    } 
} 
Cuestiones relacionadas