Fstream will nicht so wie ich



  • was geht denn daran nicht?! nen bissel detaillierter wenn es gehen würde ... mein Lösungsvorschlag sollte eigentlich gehen ...



  • Hi, ich weiß ja nicht ob du dich beim posten vertippt hast, aber als aller erstes würd ich mal das Semikolon hinter der letzten geschweiften Klammer entfernen!



  • Beobachter schrieb:

    Hi, ich weiß ja nicht ob du dich beim posten vertippt hast, aber als aller erstes würd ich mal das Semikolon hinter der letzten geschweiften Klammer entfernen!

    Genau, immer die unwichtigsten (und nichtmal fehlerhaften) Sachen zuerst anmeckern 🙄



  • Ja er erstellt bzw. schreibt nich in die Datei wenn vorhanden. Bei den Codeteilen wo ich "geht" drangeschreiben habe da gehts auch ohne Probleme und der Text wird auch immer an das Ende der Datei angefügt



  • int main()
    {
    	std::fstream file_stream("test.txt", std::ios::out | std::ios::in | std::ios::ate);
    
    	if (file_stream.is_open() == false || file_stream.good() == false)
    		std::cout << "ERROR: File could not be loaded!" << std::endl;
    
    	std::string string_line;
    	file_stream << "Testen macht Spaß" << std::endl;
    	file_stream << "keine Ahnung wo dein Problem ist ..." << std::endl;
    	file_stream.seekg(0, std::ios::beg);
    	std::getline(file_stream, string_line);
    	std::cout << string_line << std::endl;
    
    	file_stream.close();
    
    	return 0;
    }
    

    Das geht problemlos ... nur nach std::getline ist der file_stream nicht mehr zu gebrauchen ... da musst du aufpassen ...



  • (D)Evil schrieb:

    int main()
    {
    	std::fstream file_stream("test.txt", std::ios::out | std::ios::in | std::ios::ate);
    
    	if (file_stream.is_open() == false || file_stream.good() == false)
    		std::cout << "ERROR: File could not be loaded!" << std::endl;
    
    	std::string string_line;
    	file_stream << "Testen macht Spaß" << std::endl;
    	file_stream << "keine Ahnung wo dein Problem ist ..." << std::endl;
    	file_stream.seekg(0, std::ios::beg);
    	std::getline(file_stream, string_line);
    	std::cout << string_line << std::endl;
    
    	file_stream.close();
    
    	return 0;
    }
    

    Das geht problemlos ... nur nach std::getline ist der file_stream nicht mehr zu gebrauchen ... da musst du aufpassen ...

    Hab den Code gerade getestet(nachdem ich fstream und iostream eingebunden habe) und bekomme immer die Fehlermeldung "Error: File could not be loaded!", also wird die Datei nicht richitg erstellt oder wie? bzw. die ist nich offen(muss ja auch erst erstellt werden) oder ein Fehler war beim Öffnen oder?
    Wenn es die Datei schon gibt, gibts keine Probleme. Das Problem liegt also eindeudig beim erstellen der Datei.



  • Sorry für den 2ten Post nacheinander, aber:
    Funtzt der Code denn bei euch ohne Probleme? Wenn ja, was fürn OS habt ihr bzw. welchen Compiler? vllt liegts ja an den Headern, was aber sehr komisch wäre...
    Also ich nutz Windows XP Prof. Sp2 mit DevC++ v. 4.9.9.2 (halt die aktuelle)



  • Nein an den Headern kann es nicht liegen ... zumindest nicht wenn du die hast die dem STD entsprechen ...

    Du hast die Datei vllt einfach nicht am richtigen Ort ... und mein OS ist MS WinXP Prof SP2 und Compiler ist sowohl VC++2005 .Net EE und VC++ 2003 .Net Prof ..



  • Ne, dass kann ja nicht sein, bekomm ja den Error in der Konsole, daher es wird gar keine Datei erstellt bzw. geöffnet. Hab auch mal die ganze Festplatte durchsucht, aber da kam auch nix bei raus.



  • du bist dir sicher das du weißt was der Code macht?! Da steht nichts von Datei erstellen falls nicht vorhanden sondern nur was von "a+" ... also read + write + end ... wenn de ne neue Datei erstellt haben willst, falls keine existiert ... musst du das auch angeben ^^



  • Ja... Öhm xD
    Also ich habe das so gelesen, dass man "ofstream" verwendet, wenn man in eine Datei schreiben will, man "ifstream" verwendet wenn man lesen will und "fstream" für beides nimmt oder nicht?
    Also gehe ich davon aus, dass bei der Verwendung von "fstream" auch eine Datei erstellt wird, wenn nicht vorhanden. Sonst würde doch "fstream" auch kaum Sinn machen, weil, wenn ich eine Datei erstellen will und dann in diese Schreibe will bzw. vllt auch was auslesen will (warum auch immer) muss ich ja zumindes "ofstream" verwenden und das beudet, dass man wieder 2 Bezeicher/Variable hat, wie bei "ofstream"(zum schreiben) und "ifstream"(zum lesen). Dachte "fstream" wäre halt die Zusammenfassung aus beiden(so stehts auch überall), sprich fstream kann beides.

    Aber so wie ich das nun verstehe, bedeutet "fstream" nichts weiter als lesen und schreiben aber nicht erstellen oder?
    ALso kann ich gleich wieder "ofstream" und "ifstream" verwenden-->macht "fstream"in meinen Augen unlogisch.



  • Du kannst einen std::fstream durch ein std::ios::in beim open genauso gut als std::ifstream nutzen 😉 => http://www.cppreference.com/cppio/open.html

    Naja ... http://www.cppreference.com/io_flags.html#mode_flags



  • Ja als ifstream aber net als echten ofstream oder?
    Man kann doch, egal was ich bei fstream mit angebe eine nicht Vorhandene Datei nicht erstellen oder? Dazu müsste ich ofstream nutzen.

    ALso eine if-Anweisung a la :

    #include <fstream>
    #include <iostream>
    
    int main()
    {
        std::fstream file_stream;
        file_stream.open("C:\\test.txt",std::ios::ate);
        if (file_stream.is_open() == false || file_stream.good() == false)
        {
            std::cout << "File war nicht vorhanden....erstelle" << std::endl;
            std::ofstream TempDatei;
            TempDatei.open("C:\\test.txt");
            TempDatei.close();
        }
        std::string string_line;
        file_stream.open("C:\\test.txt",std::ios::ate);
        file_stream << "Testen macht Spaß" << std::endl;
        file_stream << "keine Ahnung wo dein Problem ist ..." << std::endl;
        file_stream.seekg(0, std::ios::beg);
        std::getline(file_stream, string_line);
        std::cout << string_line << std::endl;
        file_stream.close();
        getchar();
        return 0;
    }
    

    Wobei ich den Code gerade eben nur schnell hingetippt habe, denke nicht dass der so läuft...


Anmelden zum Antworten