estoy tratando de leer de un archivo que está creciendo (algo similar a lo que hace tail -F
), pero debe haber algunos problemas con mi código:¿Cómo leer un archivo de texto en crecimiento en 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);
}
Sin las líneas // * // * 1 y 2, el archivo de registro se lee correctamente hasta el final, pero si se agregan nuevas líneas no sucede nada.
Con seekg y tellg Estoy tratando de almacenar la posición final actual del archivo, para que cuando lo vuelva a abrir pueda ir allí y leer lo que se ha agregado.
Me gustaría saber qué hay de malo en mi código, y si realmente es necesario cerrar y volver a abrir el mismo archivo para este fin.
Gracias.
Ahora funciona correctamente Gracias. – Pietro
Observé que si creo el objeto ifstream en el bucle, funciona, pero si lo creo afuera no funciona. ¿Es necesario cerrar y volver a abrir un archivo para leer lo que se ha agregado? – Pietro
@Pietro, debe borrar el estado eof del 'ifstream' llamando a' ifs.clear() 'antes del siguiente intento de lectura. Creo que el 'tellg()' y 'seekg()' serán innecesarios con este enfoque. – hmjd