Próbuję odczytać z pliku, który rośnie (coś podobnego do tego, co tail -F
robi), ale nie musi być pewne problemy z mojego kodu:Jak odczytać rosnący plik tekstowy w 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);
}
bez linii // * // * 1 i 2, plik dziennika jest poprawnie czytany do końca, ale jeśli dodane są nowe linie nic się nie dzieje.
Za pomocą seekg i tellg Próbuję zapisać aktualną pozycję końcową pliku, tak, że po ponownym otwarciu mogę przejść tam i przeczytać to, co zostało dodane.
Chciałbym wiedzieć, co jest nie tak w moim kodzie, a jeśli naprawdę konieczne jest zamknięcie i ponowne otwarcie tego samego pliku w tym celu.
Dziękuję.
teraz działa poprawnie. Dziękuję Ci. – Pietro
Zauważyłem, że jeśli utworzę obiekt ifstream w pętli, to działa, ale jeśli go utworzę na zewnątrz, to nie. Czy konieczne jest zamknięcie i ponowne otwarcie pliku, aby przeczytać, co zostało dodane do niego? – Pietro
@Pietro, musisz wyczyścić stan "ifstream", wywołując 'ifs.clear()' przed następną próbą odczytu. W tym podejściu niepotrzebne jest użycie 'tellg()' i 'seekg()'. – hmjd