ifstream::seekg() funktioniert nicht
-
Ich lese den Inhalt der Datei aus und gebe alles in der Konsole wieder. Wenn ich das Ganze ein zweites mal mache, muss der Lese-Zeiger der ifstream-Klasse wieder auf den Anfang der Datei zeigen, was ja mit
seekg(0) oder mit
seekg(0,ios_base::beg);bewerkstelligt wird. Es funktioniert aber nicht.
Der Code sieht bisher so aus:
void f(ifstream& datei) { char ch; while(datei.get(ch)) cout.put(ch); datei.seekg(0); //funktioniert nicht, der Inhalt wird durch die obige whileschleife //nur einmal ausgegeben while(datei.get(ch)) cout.put(ch); }
Woran liegt denn das bloss?
-
Hi,
Es ist so das ifstream in einem Fehlzustand ist -> EOF
und daher wird das nicht funktionierenProbiers mal so:
void f(ifstream& datei) { while(!datei.eof()) cout.put(datei.get()); datei.seekg(0); while(!datei.eof()) cout.put(datei.get()); }
-
Hmm... Es wird jetzt zwar eine Leerzeile weniger ausgegeben
, aber ausgegeben wird immer noch einmal.
-
Um es nicht zum Fehlerzustand kommen zulassen, habe ich das ausprobiert, geht aber auch nicht.
void f(ifstream& datei) { while(datei.peek()!=EOF) cout.put(datei.get()); datei.seekg(0); while(datei.peek()!=EOF) cout.put(datei.get()); }
-
keinname schrieb:
Um es nicht zum Fehlerzustand kommen zulassen, habe ich das ausprobiert, geht aber auch nicht.
void f(ifstream& datei) { while(datei.peek()!=EOF) cout.put(datei.get()); datei.seekg(0); while(datei.peek()!=EOF) cout.put(datei.get()); }
Kann auch nicht gehen. Das eof-bit wird erst gesetzt *nachdem* eof gelesen wurde. Deshalb, und das schreibe ich hier jede Woche mindestens 10 Mal, ist der Test auf eof im Kopf einer Schleife in der Regel auch käse.
void f(ifstream& datei) { for(char c; datei.get(c);) cout.put(c); datei.clear(); datei.seekg(0); for (char c; datei.get(c);) cout.put(c); }
-
Herzlichen Dank! Jetzt läuft es endlich.