# Letzte Zeile aus Datei lesen C++



## Reoleam (28. Mai 2006)

Hallo Leute Ich schriebe zur zeit an einem programm welches aus einer .txt die letzte zeile liest .
Mein Code bisher:
// CODE
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
  string line;
  ifstream myfile ("renlogs.txt");
  if (myfile.is_open())
  {
    while (! myfile.eof() )
    {
      getline (myfile,line);
      cout << line << endl;
    }
    myfile.close();
  }

  else cout << "Unable to open file"; 

  return 0;
}
// CODE END
Klappt auch nur weiss ich nicht wie ich es mache das er mir hierbei nur die letzte zeile ausliest bisher liest er mir immer alles aus der datei. Wenn jemand ne Lösung dazu hat wäre ich sehr dankbar.


----------



## Messiahs_128 (28. Mai 2006)

Reoleam hat gesagt.:
			
		

> Hallo Leute Ich schriebe zur zeit an einem programm welches aus einer .txt die letzte zeile liest .
> Mein Code bisher:
> // CODE
> #include <iostream>
> ...



Sollte jetzt eigentlich funktionieren


----------



## Reoleam (28. Mai 2006)

er liefert mir nun immer noch den selben text.( er soll doch nur die letzte zeile bringen :S)
ich hab es nun auch schon geschafft mithilfe von "myfile.seekg (0, ios::end);" nur eine zeile auszulesen lassen aber hier liest er ja nur die erste zeile ich brauch ja die letzte...


----------



## Reoleam (28. Mai 2006)

uh geht schon danke schön 
achja hab da noch ne frage die .txt hat ein format von
"renlog_4-27-106.txt" weiss jemand wie ich das am besten vom timestamp her einlesen lassen kann?
& hat jemand ne ahnung wie ich die datei immer wenn sie von nem anderen programm verändert wird erst dann einlesen lasse un ausgeben lasse?


----------



## deepthroat (29. Mai 2006)

Hi.


			
				Messiahs_128 hat gesagt.:
			
		

> Sollte jetzt eigentlich funktionieren


Tut es aber nicht unbedingt, da der Code nicht bei jedem Compiler das gleiche Ergebnis liefert und überhaupt gar nicht überprüft wird ob etwas eingelesen wurde. Außerdem ist es auch nicht gerade performant.

Besser ist es das C++ Idiom zum zeilenweisen Einlesen zu benutzen und danach zu testen ob die Datei vollständig eingelesen werden konnte.

```
string zeile1, zeile2;
while (getline (myfile, zeile1)) {
  zeile2.swap (zeile1);
}
if (myfile.bad () || !myfile.eof ()) {
  // Datei konnte nicht gelesen werden o. sonst. Fehler
} else {
  // Variable zeile2 enthält hier die letzte Zeile der Datei.
  ...
}
```

Gruß

PS: Verwendet bitte die Code Tags.


----------

