Sto cercando di leggere da un file che sta crescendo (qualcosa di simile a quello che tail -F
fa), ma ci deve essere qualche problema con il mio codice:Come leggere un file di testo in crescita in C++?
string log, logFile("test.log");
size_t p = 0;
while(true)
{
ifstream ifs(logFile.c_str());
ifs.seekg(p); //*1
while(ifs.eof() == false)
{
getline(ifs, log);
cout << log << endl;
p = ifs.tellg(); //*2
}
nanosleep(&pause, NULL);
}
senza le linee // * 1 e // * 2, il file di registro viene letto correttamente fino alla fine, ma se vengono aggiunte nuove righe non accade nulla.
Con seekg e tellg Sto tentando di memorizzare la posizione finale corrente del file, in modo che quando lo riaprio riesca ad andare lì e leggere ciò che è stato aggiunto.
Mi piacerebbe sapere cosa c'è di sbagliato nel mio codice e se è veramente necessario chiudere e riaprire lo stesso file per questo scopo.
Grazie.
Ora sta funzionando correttamente. Grazie. – Pietro
Ho notato che se creo l'oggetto ifstream nel ciclo funziona, ma se lo creo all'esterno non lo fa. È necessario chiudere e riaprire un file per leggere cosa è stato aggiunto ad esso? – Pietro
@Pietro, è necessario cancellare lo stato eof di 'ifstream' chiamando' ifs.clear() 'prima del successivo tentativo di lettura. Io penso che 'tellg()' e 'seekg()' non saranno necessari con questo approccio. – hmjd