Filestream lesen und schreiben



  • @C-Sepp sagte in Filestream lesen und schreiben:

    Oder hängt es mit den Speicherort der erstellten Textdatei zusammen? Kann man den vielleicht irgendwie beeinflussen

    Natürlich kannst Du den beeinflussen ... aber wenn Du Deinen Code nicht kompilieren kannst, ändert das natürlich auch nix:

    char filename[] = "c:\\ein_ordner\\ein_unterordner\\test.txt";
    


  • Bitte nicht falsch verstehen...der Code ließ sich zuletzt kompilieren. Allerdings habe ich dazu myfile.getline(), welches bei mir nicht verfügbar ist, ausgeklammert



  • @C-Sepp sagte in Filestream lesen und schreiben:

    Bitte nicht falsch verstehen...der Code ließ sich zuletzt kompilieren. Allerdings habe ich dazu myfile.getline(), welches bei mir nicht verfügbar ist, ausgeklammert

    🤦♂
    Aha.
    Du lässt was weg, und dann funktioniert es nicht. Und das wundert dich jetzt? Ernsthaft?



  • Naja, hier passierte ja sowieso nix:

     while(myfile.getline(line, size))  //Fehler
     {        
     } 
    

    Trotzdem sollte das übersetzt werden können, wenn myfile den korrekten Typ hat ...



  • @hustbaer : So ist es nicht....ich habe als das getline() ausgeklammert, um zuerst das Schreiben von Daten in die Datei
    in Griff zu bekommen. Das funktioniert nicht, so wie man es denke ich herauslesen kann.



  • @C-Sepp Dann zeig doch nochmal 1 zu 1 den Code, der jetzt nicht funktioniert. Aus Prosa zu versuchen zu erraten, was du genau gemacht hast, ist mühselig.

    Hast du den Ideone Link von @SeppJ gesehen?



  • @C-Sepp Wenn du das getline ausgeklammert hast, dann ist line uninitialisiert. Wenn du sonst nix geändert hast, dann hat das Programm UB und du musst dich nicht wundern wenn es nicht funktioniert.

    Ansonsten: das was @Schlangenmensch gerade geschrieben hat.



  • @hustbaer: cin.getline(line, size) habe ich nicht ausgeklammert, ich habe nur myfile.getline() ausgeklammert aus
    bereits genannten Gründen

    Mein Quellcode:

    
    > #include <iostream>
    > #include <fstream>
    > using namespace std;
    > 
    > char filename[] = "test.txt";
    > 
    > int main()
    > {
    >     char line[100];
    >     const int size = sizeof(line);
    > 
    >     fstream myfile(filename, ios::out | ios::app);
    >     if (!myfile)
    >         cerr <<"Fehler beim Öffnen der Datei"<<endl;
    > 
    >     while (cin.getline(line, size))
    >     {
    >         if (line[0]=='.')
    >            break;
    >         if (!(myfile <<line <<endl)) //1. Option Daten in eine Datei zu schreiben
                   cerr <<"Fehler beim Schreiben der Datei"<<endl;
               if (!myfile.write((char*)&zeile, sizeof(zeile))) //2. Option Daten in eine Datei zu schreiben 
                    cerr << "Fehler beim Schreiben der Datei" << endl;
    
    >      }
    >      myfile.close();
    > 
    >      myfile.open(filename, ios::in);
    >      if (!myfile)
    >         cerr <<"Fehler beim Öffnen der Datei" <<endl;
    >      
    >      //while(myfile.getline(line, size))  //ausgeklammert da nicht verfügbar ("error C2039: "getline" ist kein Member von "std::basic_ofstream<char,std::char_traits<char>>".)
    >      //{        
    >      //} 
    > }
    >   
    >   ```
    > Komischerweise ließ sich mit der 1. Option bzw. 2. Option jetzt  was in die Datei schrieben.  Das waren 
    allerdings immer nur diese kryptische Zeichen, egal was ich eingegeben habe: (ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌø€÷
    ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌø€÷
    ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌø€÷
    ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌø€÷
    ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌø€)


  • Das ist nicht dein Quellcode. Wäre dies dein Quellcode, würdest du aufgrund der ">"-Zeichen und aufgrund der Variable "zeile" in Zeile 23 Fehler bekommen.

    Die Fehlermeldung weist auf einen ofstream hin. Sicher, dass du einen fstream hast? Warum überhaupt die Datei-Variable wiederverwenden? Nimm besser einmal einen ofstream zu Schreiben und einen ifstream zum Lesen. Dann brauchst du auch nicht die ios::-Konstanten (außer für append). Und das open geht dann gleich im Konstruktor.



  • @C-Sepp Ich habe das "zeile" durch line ersetzt und den auskommentierten Code einkommentiert.

    Kompiliert mit VS2019. Ich habe die Professional Version, aber vom Compiler sollte das keinen Unterschied machen.

    Deine 1. Option funktioniert sogar und schreibt die Eingabe in die Datei "test.txt". (Dafür habe ich die "Option 2" auskommentiert 😉 )

    Ich vermute du machst noch irgendwas anderes anders, was du vlt. gar nicht auf dem Schirm hast. Aber was, kann ich dir nicht sagen



  • @C-Sepp sagte in Filestream lesen und schreiben:

    @hustbaer: cin.getline(line, size) habe ich nicht ausgeklammert, ich habe nur myfile.getline() ausgeklammert aus
    bereits genannten Gründen

    Ah. Ja. Mein Fehler.

    Allerdings ist das wie schon von @wob und @Schlangenmensch geschrieben sicher nicht der Code den du kompiliert hast. Wieso zeigst du uns nicht den Code den du wirklich verwendest? Kannst du aus irgend einem Grund den Code nicht 1:1 aus der IDE raus hier ins Forum kopieren (copy & paste)? Ich check's halt nicht ganz was das Problem ist.



  • Jetzt hat es funktioniert....ich habe den relevanten Quellcode, den ich hier gepostet habe, in ein extra Projekt gepackt und im nu lief die Sache. Sogar myfile.getline() ist verfügbar. Schien also aus irgend einen Grund an den anderen Quellcode zu liegen. Danke :)!


Anmelden zum Antworten