Input/Output Problem



  • Hallo, ich hab eine Frage und vielleicht können die Experten/Wissenden mir helfen

    Hier ist der Quellcode:

    #include <iostream>
    #include <cstdlib> //Exit()
    #include <fstream> //ifstream, ofstream
    #include <string>
    
    using namespace std;
    
    int main()
    {
        string quelldateiname("in.txt");
        string zieldateiname("out.txt");
        char ch;
    
        //Datei öffnen
        ifstream quelle(quelldateiname.c_str(), ios::binary | ios::in);
    
        if(!quelle)
        {
            cerr<<quelldateiname<<" kann nicht geoeffnet werden"<<endl;
            exit(-1);
        }
    
        ofstream ziel(zieldateiname.c_str(), ios::binary | ios::out);
        if(!ziel)
        {
            cerr<<zieldateiname<<" kann nicht geoeffnet werden"<<endl;
            exit(-1);
        }
    
        while(quelle.get(ch))
        {
            ziel.put(ch);
        }
    
        system("PAUSE");
        return 0;
    }
    

    Damit will ich eine Datei öffnen, in der was eintippen und zeichenweise in die
    zweite Datei kopieren. Doch es erstellt nicht mal die Datei was es eigentlich
    tun sollte durch ios::in und/oder ios::out, nicht?

    Danke für die Antworten schon mal

    mfg Zenter



  • Zenter schrieb:

    Doch es erstellt nicht mal die Datei was es eigentlich
    tun sollte durch ios::in und/oder ios::out, nicht?

    Jürgen Wolf? 🙄 :p

    Das Flag ios::in verhindert genau das. Erst mit einem std::ofstream kann eine Datei erstellt werden. Bedeutet: Entweder

    std::ofstream null("Dateiname.txt", std::ios::trunc);
    

    an den Anfang schreiben und die Datei erstellen/leeren, oder manuell erstellen.



  • Hallo, danke erstmal für die Antwort und nein es ist kein Buch vom Jürgen Wolf^^.

    Habs mit

    #include <iostream>
    #include <cstdlib> //Exit()
    #include <fstream> //ifstream, ofstream
    #include <string>
    
    using namespace std;
    
    int main()
    {
        ...
    
        ifstream quelle(quelldateiname.c_str(), ios::binary | [b]ios::trunc[/b]);
    
        ...
    
        ofstream ziel(zieldateiname.c_str(), ios::binary | [b]ios::trunc[/b]);
    
        ...
    
        return 0;
    }
    

    probiert doch es funktioniert nicht. Es kann auch garnicht funktionieren in meine Augen den für ifstream
    braucht man ios::in damit man die Datei einlesen kann und für ofstream ios::out damit man in eine Datei reinschreiben kann


  • Mod

    Da es hier so oft vorkommt, tippe ich mal ins Blaue, dass eigentlich alles funktioniert, bloss dass es ganz woanders stattfindet als du denkst und du daher die Datei nicht findest.

    Das ios::in bzw. ios::out kannst du dir bei ifstream bzw. ofstream uebrigens sparen, dass ist schon implizit.



  • Hallo SeppJ,

    dass es woanders die Datei gespeichert bzw. erstellt wird, kann nicht sein, denn durch die Abfrage ob die Datei überhaupt geöffnet wurde

    if(!quelle)
    

    kommt das Programm nicht vorbei und wird durch

    exit(-1);
    

    dann beendet. Das heißt das die Datei nicht erstellt wurde und somit auch nicht geöffnet wurde.

    mfg Zenter



  • Warum sollte eine Datei, die zum Lesen geöffnet wird, vom Programm erstellt werden? Das ist doch völlig sinnfrei.



  • Hallo manni66,

    da hast du aufjeden fall recht!! 😃
    hab nun selber die Datei erstellt für ifstream und darin was geschrieben. Das Programm hat die ofstream Datei erstellt und das geschriebene in die ofstream Datei kopiert. Hat ganz gut geklappt.

    Dank dir!!

    Logik war die Lösung thanks.

    Der thread kann geschlossen werden 🙂

    mfg Zenter


Anmelden zum Antworten