Datei mit String schreiben und lesen



  • Ich mal wieder *gg*

    Ich habe zwei Strings, die ich in eine Datei schreiben und später wieder lesen will.

    Die Strings kommen aus einem Edit-Feld.
    Da ich vorher noch nicht mit Dateien gearbeitet habe, weis ich nicht wie ich die Datei damit beschreibe.

    Wenn ich folgende Funktion bastel:

    void __fastcall TForm2::setData(String pw, int kid)
    {
    	fstream file;
    	file.open("kpw.dat", ios::out);
    	file<<pw<<endl;
    	file<<kid<<endl;
    	file.close();
    }
    

    kommt folgende Fehlermeldung:
    [BCC32 Fehler] KonzernTool.cpp(121): E2094 'operator<<' ist im Typ 'fstream' für Argumente des Typs 'AnsiString' nicht implementiert.

    Wie bekomme ich das sonst in die Datei 😕

    Und wenn ich das dann mal drin habe, wie kann ich das ganze dann wieder in die zwei Variablen reinlesen?



  • Hallo Paddel

    einfach geht es z.B. mit einer StringList:

    TStringList *Daten;
    
    Daten=new TStringList();
    Daten->Add("Text z.B. aus Edit");
    Daten->Add(Form1->edit->Text);   // oder so
    
    Daten->SaveToFile("c:\test.txt");
    delete Daten;
    

    Mit dem Befehl LoadFromFile dann halt wieder in Strings laden und
    dem Edit zuordnen:

    TStringList *Daten;
    
    Daten=new TStringList();
    Daten->LoadFromFile("c:\test.txt");
    
    Form1->edit->Text=Daten->Strings[0];
    
    delete Daten;
    

    Falls Du es mit Streams machen möchtest:

    AnsiString zFile,z1;
     Word wWert;                                                                   
     TFileStream *Datei;                                                             
    
      zFile="c:\test.txt";
      z1   ="Dein Text im String";
      wWert=fmOpenReadWrite; if(FileExists(zFile)==false) { wWert=fmCreate; }          // normaler Openmodus (sonst neu erzeugen)
      Datei=new TFileStream(zFile,wWert);                                              // Datei öffnen zum Lesen/Schreiben
      Datei->Seek(0,soFromEnd);                                                     // Zeiger ans Ende setzen
      Datei->Write(z1.c_str(),z1.Length());                                         // und anhängen
      delete Datei;                                                                 // Datei freigeben
    

    Gruss Stefan



  • Hallo

    Ich mache es so:
    schreiben:

    TStringList *Daten= new TStringList;
     Daten->Add(Edit1->Text);
     Daten->Add(Edit2->Text);
     Daten->SaveToFile("Meine_Datei");
     delete Daten;
    

    und lesen:

    TStringList *Daten= new TStringList;
     Daten->LoadFromFile("Meine_Datei");
     Edit1->Text=Daten->Strings[0];
     Edit2->Text=Daten->Strings[1];
     delete Daten;
    

    wNW



  • zu spät ...

    wNw



  • supi, danke euch beiden 🙂



  • In der Hilfe zu AnsiString steht auch wie man den erst genannten Fehler vermeidet.

    Hinweis: Wenn Sie die Streaming-Operatoren von C++ (<< und >>) mit dem Typ AnsiString nutzen möchten, müssen Sie vor #include <dstring.h> die Anweisung #include <iostream> oder #define VCL_IOSTREAM angeben. Verwenden Sie die include-Anweisung mit vcl.h oder system.h, geschieht dies automatisch. Die Operatoren werden dabei folgendermaßen definiert:

    ostream& operator << (ostream& os, const AnsiString& arg);

    istream& operator >> (istream& is, AnsiString& arg);


Anmelden zum Antworten