# ifstream / ofstream



## darki777 (1. Mai 2006)

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


----------



## thetrue (1. Mai 2006)

so macht man das:

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


----------



## deepthroat (1. Mai 2006)

Hi.





			
				thetrue hat gesagt.:
			
		

> so macht man das:
> 
> ifstream in("test.txt");
> while(!in.eof())
> ...


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:
	
	
	



```
ifstream  in("test.txt");
char ch;
while (in >> ch) cout << ch;
```
Wenn du zeilenweise vorgehen willst, dann geht das so:
	
	
	



```
ifstream in("test.txt");
string line;

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

Gruß


----------



## thetrue (1. Mai 2006)

ok, du hast Recht 
bei meiner Methode list er auch ein NULL-byte


----------



## darki777 (1. Mai 2006)

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



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



da wird komischerweise bei mir die letzte eingegebene Zeile die ich hinzugefügt hab, immer doppelt angezeigt.


----------



## deepthroat (1. Mai 2006)

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ß


----------



## thetrue (1. Mai 2006)

ohh, ok danke für die Info 
werde ich mir merken


----------



## deepthroat (1. Mai 2006)

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


----------



## darki777 (2. Mai 2006)

oke, danke werd ich mir merken


----------

