problem mit ifstream
-
Bei mir funktionockelt das wunderbar (vs2010). Aber auch Vs2005 würde ich das zutrauen. Ich könnte mir vorstellen, dass der Fehler irgendwo anders vergraben liegt.
-
Decimad schrieb:
Bei mir funktionockelt das wunderbar (vs2010). Aber auch Vs2005 würde ich das zutrauen. Ich könnte mir vorstellen, dass der Fehler irgendwo anders vergraben liegt.
Naja, ich habe genau oben geposteten Code in eine leere main gepackt.
das 2. while überspringt er komplett.
-
Und welche Error-Flags sind anschließend gesetzt?
-
vlad_tepesch schrieb:
Naja, ich habe genau oben geposteten Code in eine leere main gepackt.
das 2. while überspringt er komplett.Auch mit einem file.clear() zwischen close und open?
-
MFK schrieb:
vlad_tepesch schrieb:
Naja, ich habe genau oben geposteten Code in eine leere main gepackt.
das 2. while überspringt er komplett.Auch mit einem file.clear() zwischen close und open?
ja.
auch wenns nach dem Open gemacht wird -> keine Auswirkung.
-
Also was ich ausprobiert habe, sah jetzt so aus:
int main(int argc, char* argv[]) { std::ifstream file; file.open("test.txt"); std::string line; while( std::getline(file, line) ) { std::cout << line << '\n'; } file.close(); std::cout << '\n'; file.open("test.txt"); while( getline(file, line) ) { std::cout << line << '\n'; } file.close(); return 0; }
... und rattert mir wie erwartet zweimal die Datei auf die Konsole.
-
Ah, ok.
**
Das clear löst das Problem doch.**Ich hatte erst im Testprogramm vergessen, im 2. open einen gültigen Pfad anzugeben und danach das zwischenzeitlich eingefügte seek zu entfernen, dass ich auch noch vor dem open eingefügt hatte.
Danke Leute!
edit:
aber ohne das clear gehts wirklich nicht.
-
Möge der Stream mit uns sein!
-
Mögen die Leute endlich lernen, dass Streams RAII können. Ist ja schrecklich.
-
PiOhneKomma: Nun nicht so hart sein, das war sein runtergestripptes Beispiel, dass wohl bei n Durchläufen zumindest mal die File-Pointer-Position als Zustand mitschleift oder so ähnlich, wir haben ja gar nicht so genau gesehen, was er nun dort tut. Sicherlich ginge das natürlich auch mit RAII und nem auto_ptr auf dem Heap
-
Wozu nen auto_ptr?
-
Na um bloß keine Leaks zu bekommen!
-
Wo willst du denn da Leaks bekommen?
-
Löschen bitte.
-
Na auf dem Heap!
-
Ich sehe keine Heap-Allokationen.
-
314159265358979 schrieb:
Wo willst du denn da Leaks bekommen?
Wenn du mal nicht nur auf deine reflexauslösenden Schlüsselwörter reagieren, sondern den Thread auch mal genau lesen würdest, würdest du sehen, dass man hier für RAII einen Smartpointer braucht.
-
Du hast Recht, habe mir nur den Code im Thread angesehen. Sorry.
-
314159265358979 schrieb:
Mögen die Leute endlich lernen, dass Streams RAII können. Ist ja schrecklich.
was ist damit gemeint?
was hat das mit meinem Problem zu tun?wenn damit gemeint ist, dass ich einen Stream auch nur für eine Datei benutzten sollte, dürfte die Klasse kein open und close anbieten.
-
vlad_tepesch schrieb:
314159265358979 schrieb:
Mögen die Leute endlich lernen, dass Streams RAII können. Ist ja schrecklich.
was ist damit gemeint?
was hat das mit meinem Problem zu tun?wenn damit gemeint ist, dass ich einen Stream auch nur für eine Datei benutzten sollte, dürfte die Klasse kein open und close anbieten.
Ich finde auch, Du solltest open und close gar nicht benutzen.
Um die Stream-Variable lokaler zu machen, setze ich einen eigenen Block.