Ich versuche, aus einer Datei zu lesen, die (etwas Ähnliches, was tail -F
tut) wächst, aber es muss einige Probleme mit meinem Code sein:Wie liest man eine wachsende Textdatei 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);
}
Ohne die Linien // * 1 und // * 2, die Protokolldatei wird korrekt bis zum Ende gelesen, aber wenn neue Zeilen hinzugefügt werden, passiert nichts.
Mit seekg und tellg Ich versuche, die aktuelle Endposition der Datei zu speichern, so dass, wenn ich es wieder öffnen ich dort Straße gehen und lesen, was hinzugefügt wurde.
Ich mag würde wissen, was in meinem Code falsch ist, und wenn es wirklich notwendig, die gleiche Datei für diesen Zweck zu schließen und wieder öffnen.
Vielen Dank.
it Now funktioniert einwandfrei. Vielen Dank. – Pietro
Ich habe festgestellt, dass wenn ich das Ifstream-Objekt in die Schleife erstellen, es funktioniert, aber wenn ich es außerhalb erstellen, tut es nicht. Ist es notwendig, eine Datei zu schließen und erneut zu öffnen, um zu lesen, was ihr hinzugefügt wurde? – Pietro
@Pietro, müssen Sie den eof-Zustand des 'ifstream' löschen, indem Sie' ifs.clear() 'vor dem nächsten Leseversuch aufrufen. I _think_ Die 'tellg()' und 'seekg()' sind bei diesem Ansatz unnötig. – hmjd