fstream Probleme mit GCC
-
Hallo,
ich habe ein Beispielprogramm probiert, welches fehlschlug.
Das Problem ist folgendes:fstream f("test.dat", ios::in|ios::out|ios::binary );sollte eine neue Datei erzeugen können, tut es aber nicht.
Das geht offenbar mit dem aktuellen GCC nicht mehr:
http://gcc.gnu.org/ml/gcc-bugs/2002-04/msg01055.htmlMuß ich jetzt jedesmal erst testen, ob die Datei schon exisitiert,
oder geht das einfacher?!Danke,
Stimpleton
-
was heißt denn "fehlschlug"?
Fehlermeldung?
-
Fehlschlug:
- keine Datei erzeugt (das ging früher mit der genannten Zeile)
- f.good() liefert danach false (da es keine vorhandene Datei fand)Die Interpretation dieser Zeile ist jetzt anders als in dem
Beispielprogramm angenommen. Und ich habe keinen Modus gefunden,
der folgendes tut:- bestehnde Datei zum Lesen/Schreiben öffnen, falls vorhanden
- neue Datei zum Lesen/Schreiben anlegen, falls noch nicht vorhanden.. so war die Interpretation wohl früher.
-
Ich habe jetzt eine etwas unbefriedigende Lösung:
{ fstream test( filename, ios::in|ios::binary ); // does file exist? if(!test.good()) { // no? -> create new empty file fstream create( filename, ios::out|ios::trunc|ios::binary ); } }Dieser Block kommt vor das eigentliche Öffnen der Datei.
fstream file( filename, ios::in|ios::out|ios::binary );Falls die Datei nicht zu öffnen ist, wird sie neu erstellt.
(Blöd nur, wenn die Datei existiert und trotzdem nicht zu öffnen ist.)
-
Falls ein existierendes File überschrieben werden soll könnte man
fstream file( filename, ios::in|ios::out|ios::binary|ios::trunc );
schreiben.