fstream Problem: ios::in und ios::out nicht gleichzeitig möglich ?



  • Hallo zusammen ...

    Für ein kleines Projekt soll durch ein C++-Programm eine Datei eingelesen werden und später durch weitere Daten ergänzt werden. Die Datei muss also zum lesen und schreiben geöffnet werden. Ganz einfach hab ich mir gedacht...

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main()
    {
    	fstream file;
    
    	file.open("C:/test.txt",ios::out|ios::in);
    	file.write("Test",sizeof("Test"));
    	file.close();
    
    	return 0;
    }
    

    Es passiert aber nicht. Es wird keine Datei erstellt!
    Daraushin hab ich einfach mal "ios::in" raus genommen ("file.open("C:/test.txt",ios::out);") und siehe da...
    Die Datei wird erstellt.

    Was mache ich bei so einfachen Programm falsch?
    Ich benutze VS 2008 Express.

    Danke für euere Hilfe 🙂



  • vllt mal mit C:\\test.txt versuchen?



  • Mandel schrieb:

    ..
    Es passiert aber nicht. Es wird keine Datei erstellt!
    Daraushin hab ich einfach mal "ios::in" raus genommen ("file.open("C:/test.txt",ios::out);") und siehe da...
    Die Datei wird erstellt.

    Das ist relativ profan - im Konstruktor von fstream wird letztlich _wfsopen (bzw. _fsopen) aufgerufen. Dabei wird ios::out in "w" und ios::out|ios::in in "r+" umgesetzt und falls letzteres geschieht wird das nicht vorhandene File nicht erzeugt (s. Hilfetext).



  • Warum machst du nicht alles nacheinander, in etwa so:

    file.open("C:/test.txt", ios::out);
        ...
        file.close();
    
        file.open("C:/test.txt", ios::in);
        ...
        file.close();
    

    Wenn du oft lesen und schreiben musst, kannst ja eine for schleife einbinden.



  • Sieh einfach mal nach, wie die ios::in und ios::out im open zu setzen sind. Aber das macht nur das korrekte Öffnen der Datei. Für das gleichzeitige Lesen und Schreiben brauchst du dann noch einiges mehr.



  • @Werner Salomon
    Vielen Dank für die Antwort!
    Ich hab mir halt eingebildet, schon in einigen Tutorials gesehen zu haben, dass ios::in und ios::out zusammen übergeben wurden.

    @AndyK.
    So mach ichs jetzt. Dachte nur, dass es ne elegantere Lösung gibt 😉


Anmelden zum Antworten