Datei-Ende wird nicht gefunden
-
Servus,
ich habe (mal wieder) ein Problem: Ich habe eine Methode, die einen Stream als übergeben bekommt. Die Methode soll nur den Stream bis zum Ende der Datei auslesen lassen.
//weiter vorne: ifstream myInStream(fileName); //... Klasse.MeineMethode1(myInStream); //... void MeineMethode1(istream myInStream) { //for (string ReadString; getline(myInStream, ReadString);) while (myInStream.eof()==0)) { MeineKlasse mk; mk.MeineMethode2(myInStream); } return; }
Das Programm liest die Datei, hört dann aber nicht auf, sondern es versucht weiter aus dem istream zu lesen. Das heißt doch, dass myInStream.eof() nicht von 0 auf 1 wechselt, sondern auf 0 stehen bleibt.
Wenn ich statt der Zeile mit der While-Bedingung die darüberstehende Zeile mit der For-Bedingung verwende macht das Ding zwar was anderes, aber dafür richtig, d.h. es stoppt nachdem die Datei ausgelesen ist.
Das wundert mich...Kann mir bitte jemand einen Kommentar dazu geben?
Gruss,
Karl
-
ersetz doch die Zeile einfach durch while(myInStream), dann hast du ja den gleichen Effekt wie bei der for Schleife, dass du über den ::std::istream::operator bool() prüfst.
-
Das habe ich auch schon versucht. Es ändert leider nichts!
Und was mich noch mehr verwundert: in der Methode2 wird unter anderem auch ein getline auf den MyInStream angewendet.Das sollte unterm Strich doch nach aussen den gleichen Effekt haben, oder?
Gruss,
Karl
-
Zeig mal den ganzen Source durch den der Stream durchläuft.
also auch MeineMethode2.Devil
-
void MeineMethode1(istream myInStream)
Ist es beabsichtigt den stream zu kopieren ?
-
streams kann man nicht kopieren (zumindest nicht via konstruktor :)).
Entweder ist die StdLib Buggy (und das Problem wär gelöst, weil einfach eine Referenz benutzt werden müsste) oder es handelt sich um einen C&P Fehler
-
Problem hat sich geklärt:
Kingruedi schrieb: Referenz benutzen, jetzt geht es!Vielen Dank
Karl
-
am besten du gewöhnst dir gleich an, deine objekte nur per referenz zu übergeben, das spart einiges