Aus Dateien lesen und in Dateien schreiben!
-
Hallo.
Das mit dem schreiben und lesen in bzw. aus Dateien kann ich ja. Also mit ofstream (bzw. ifstream) und dateiname.open und so...
Allerdings habe ich ein Problem:
Wenn mein Programme eine Datei öffnet und dann wieder schliesst, kann ich sie nicht nochmal öffnen. Ich öffne sie also zum Lesen, schliesse sie dann wieder. Öffne sie (später) dann wieder und speichere etwas rein und schliesse sie dann wieder. Wenn ich nun aber die Datei noch mal öffnen möchte, dann funktioniert das nicht. Es kann nicht geöffnet werden. Warum? und was kann man dagegen machen?Thx im Vorraus,
BigNick
-
ähm was sollen die Sternchen da im "v o r r a u s"?
-
Poste mal deinen Code, mit dem du die Datei öffnest und schließt.
PS: V O R R A U S wird "Voraus" geschrieben
-
*gg* thanx im vorraus.. ein häufig gemachter fehler!
wenn du die datei nach dem schreiben nicht mehr zum schreiben öffnen kannst, liegt das wahrscheinlich daran, dass die datei noch immer geöffnet ist, bzw. ein anderes programm aus der datei liest.
hast du den FILEpointer auch wirklich wieder geschlossen?
mfG (c)h
-
poste einfach deinen Code
mfg CSS
-
Du musst die Datei wieder schließen.
@chille: In C++ gibt es den aus C bekannten FilePointer FILE* nicht mehr, er muss den Stream schließen mit datei.close() bevor er die Datei wieder öffnen kann.
Ist ein Standard-C++-Problem.
MfG SideWinder
-
Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
SideWinder schrieb:
@chille: In C++ gibt es den aus C bekannten FilePointer FILE* nicht mehr, er muss den Stream schließen mit datei.close() bevor er die Datei wieder öffnen kann.
Ist ein Standard-C++-Problem.
sorry... hab nicht genau genug geschaut....
ich kann natürlich C++ auch, bin aber C gewohnt(lernen wir in der schule), deshalb die verwechslung.mfG (c)h
-
Fürn Stift schon okay
MfG SideWinder
-
Also der Code. Ich habe doch die Datei wieder geschlossen... Aber wenn ich lese, dann schreibe, dann gehts nicht nochmal auf zum lesen!
-
Also der Code. Ich habe doch die Datei wieder geschlossen... Aber wenn ich lese, dann schreibe, dann gehts nicht nochmal auf zum lesen!
//[...] hier fehlt der anfang, ist nicht wichtig if(wahl=='j' || wahl=='J') { string dateiname="Save.txt"; ifstream dat_lesen; dat_lesen.open(dateiname.c_str(), ios_base::in); if(!dat_lesen) { cout <<"Die Datei Save.txt konnte nicht zum Lesen geoeffnet werden"<<endl; fflush(stdin); getchar(); } char zeichen;string str=""; while(zeichen!=' ' && !dat_lesen.eof()) { dat_lesen.get(zeichen); str+=zeichen; } dat_lesen.close(); konto=atof(str.c_str()); //konto ist eine Double-Variable ofstream dat_schreiben; dat_schreiben.open(dateiname.c_str(), ios_base::out); if(!dat_schreiben) { cout <<"Die Datei Save.txt konnte nicht zum Schreiben geoeffnet werden"<<endl; fflush(stdin); getchar(); } konto+=punkte; dat_schreiben <<konto <<endl; dat_schreiben.close();
So und wenn jetzt das Programm weiterläuft und später nochmal die Datei so wie hier geöffnet werden soll, dann gehts net!
-
1. fflush(stdin) hat undefiniertes Verhalten.
2. Das:char zeichen;string str=""; while(zeichen!=' ' && !dat_lesen.eof()) { dat_lesen.get(zeichen); str+=zeichen; }
ist käse. Erstmal ist zeichen im ersten Durchlauf undefiniert. Dazu kommt, dass der Test auf eof gefolgt von einer ungeprüften Leseoperation keine gute Idee ist:
Siehe: http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=eof#Answ