ifstream / ofstream

darki777

Grünschnabel
Hi,
ich wollte fragen wie ich den gesamten Inhalt einer Datei, z.b. text.txt auf meinem Konsolefenste ausgeben lassen kann. Irgendwie muss ich ja noch zusätzlich das eof flag auch noch abfragen oder?

Vielen Dank schon mal im Vorraus, mfg darki
 
Hi.
thetrue hat gesagt.:
so macht man das:

ifstream in("test.txt");
while(!in.eof())
{
char ch;
in>>ch;
cout<<ch;
};
Nein, so sollte man es nämlich gerade nicht machen (und verwende doch bitte die Code Tags). @darki777: Nein, du mußt das eof Flag nicht extra abprüfen.

Das Standard Idiom um in C++ Text zeichenweise zu lesen (und dann wieder auszugeben) ist:
C++:
ifstream  in("test.txt");
char ch;
while (in >> ch) cout << ch;
Wenn du zeilenweise vorgehen willst, dann geht das so:
C++:
ifstream in("test.txt");
string line;

while (getline(in, line)) cout << line << endl;

Gruß
 
super danke :) geht alles wunderbar, bis auf diese Methode hier:

ifstream in("test.txt");
while(!in.eof())
{
char ch;
in>>ch;
cout<<ch;
};

da wird komischerweise bei mir die letzte eingegebene Zeile die ich hinzugefügt hab, immer doppelt angezeigt.
 
thetrue hat gesagt.:
ok, du hast Recht ;)
bei meiner Methode list er auch ein NULL-byte
Naja, dein Code hat noch mehr Probleme. Tritt z.B. ein Fehler auf (z.B. Lesefehler vom Medium o.ä.) dann hast du eine Endlosschleife weil du nur auf EOF prüfst und so niemals EOF auftreten wird und es wird immer das gleiche Zeichen ausgegeben weil von einem Stream im Fehlerzustand nichts mehr gelesen werden kann. Außerdem läufst du Gefahr eines off-by-one Error denn manche Implementierungen geben bereits EOF zurück wenn beim nächsten Einleseversuch ein EOF gelesen werden würde, andere erst wenn wirklich versucht wurde hinter das Dateiende zu lesen. Dann wird gar nicht geprüft ob etwas eingelesen werden konnte...

Gruß
 
darki777 hat gesagt.:
super danke :) geht alles wunderbar, bis auf diese Methode hier:



da wird komischerweise bei mir die letzte eingegebene Zeile die ich hinzugefügt hab, immer doppelt angezeigt.
Deswegen solltest du diese Methode ja auch nicht verwenden - wegen der eben erläuterten Probleme.

Gruß

/edit: Ich hab grad nochmal ein wirklich schönes Beispiel aus diesem Forum rausgesucht. Da wundert sich 2fast4you warum sein Code nicht funktioniert - dabei verwendet er die !eof Methode obwohl er es angeblich
besser weiß. Ich fand es ja zu lustig - obwohl ich mich auch etwas echauffiert habe: Textdatei in String #9
 
Zuletzt bearbeitet:
Zurück