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.html

    Muß 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.


Anmelden zum Antworten