Daten in Datei speichern



  • HI ich möchte gerne daten in einer txt datei abspeichern so das geht ja z.B. mit diesem code:

    #include <fstream> 
    #include <iostream> 
    using namespace std; 
    
    int main() 
    { 
    ofstream schreiben; 
    schreiben.open("C:\\Text.txt"); 
    schreiben << "Dieser Text kommt in die Datei"; 
    schreiben.close(); 
    return 0; 
    }
    

    aber wie kann mand as amchen das er die datei immer automatisch in dem Verzeichnis erstellt in dem auch die exe datei liegt?



  • Wenn du einen relativen Pfad angibst (z.B. "Test.txt"), wird der immer vom aktuellen Arbeitsverzeichnis aus berücksichtigt - bei einem Start von der Konsole ist das das Verzeichnis, wo du gerade unterwegs warst, bei einem Start aus Windows heraus i.d.R. das Heimatverzeichnis des Programms.



  • müsste so gehen :
    statt
    schreiben.open("C:\\Text.txt");
    das hier
    schreiben.open("Text.txt");



  • und wie kann man diese Datei dann wieder auslesen?



  • ifstream lesen;string data;
    lesen.open("Test.txt");
    getline(lesen,data);
    


  • in welcher variablen wird den in dem fall der inhalt gespeichert?



  • 2 mal darfst du raten 😃



  • ja wenn ich data per coit ausgeben will erschient nix und bei lesen nur der wert 0 😞



  • ups schon gut^^



  • Alles schön und gut, aber wie finde ich das Heimatverzeichnis raus?
    In Vista wird dann alles knallbobbenhard auf dem Desktop abgespeichert, was glaubt ihr, wie der bei mir jetzt aussieht. (also einfach "test.txt" angeben funktioniert dann nicht mehr, ich MUSS das Heimatverzeichnis als String irgendwo doch herbekommen, oder nicht?)



  • jo klar, das steht zum einen in der umgebungsvariablen %USERHOME% und in der registry. wie man auf die beiden stellen jeweils aus c++ heraus zugreift... k.a., noch nie benötigt 😉



  • könntest aber auch einfach "./Test.txt" verwenden, glaub ich!



  • Ja, ".//text.txt" scheint vorrübergehend zu funktionieren (Wahrscheinlich bis zum nächsten Update :p ). Ich weiss nicht, wie das bei euch ist, ich sollte bei meinem Compiler aber zwei Slash benutzen, weil er sonst rummeckert.
    Danke!



  • edit:bitte beitrag löschen!



  • void kontoalg(konto liste[anz])

    {

    char antwort;
    int zae=0, z=0;
    bool merker;

    void gotoxy (int zae,int z);
    {

    do
    {
    system ("cls");
    gotoxy(29,10);
    cout<<"## KONTO ANLEGEN ##"<<endl<<endl;
    cout<<"Nachname: ";
    gotoxy(29,12);
    cin>>liste[zae].name;
    gotoxy(29,13);
    cout<<"Kontonr.: ";
    cin>>liste[zae].kontonr;
    gotoxy(29,14);
    cout<<"Kontostand: ";
    cin>>liste[zae].kbetrag;

    //int main ()

    ofstream dataus; // Speichern
    dataus.open("TEXT.txt", ios::out);

    for(int y=0;y <anz;y++)
    {
    dataus<<liste[y].name<<" ";
    dataus<<liste[y].kontonr<<" ";
    dataus<<liste[y].kbetrag<<endl;
    }
    dataus.close(); //Ende Speichern[/COLOR]

    ifstream datin; //Anfang Laden
    datin.open("TEXT.txt", ios::in);

    for(int y=0;!datin.eof();y++)
    {
    107 datin>>liste[y].name<<" "; *************** FEHLER 👎
    108 datin>>liste[y].kontonr<<" "; *************** FEHLER 👎
    109 datin>>liste[y].kbetrag<<endl; *************** FEHLER 👎
    }
    datin.close(); //Ende Laden[/COLOR]

    zae++;
    system ("cls");
    gotoxy(25,13);
    cout<<"Noch ein Konto anlegen? -j,J/n,N";
    cin>>antwort;

    }
    while(antwort == 'j' || antwort == 'J' && zae < 10 );

    }
    }

    DAS SIND DI FEHLER EBEN DIE ICH NICH LÖSEN KANN

    C:\Dev-Cpp\my projekts\kuh\kjgljh.cpp In function `void kontoalg(konto*)':

    107 C:\Dev-Cpp\my projekts\kuh\kjgljh.cpp no match for 'operator<<' in 'std::operator>> [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](((std::basic_istream<char, std::char_traits<char> >&)((std::basic_istream<char, std::char_traits<char> >)(&datin))), ((std::basic_string<char, std::char_traits<char>, std::allocator<char> >&)((std::string)((+(((unsigned int)y) * 12u)) + liste)))) << " "'

    108 C:\Dev-Cpp\my projekts\kuh\kjgljh.cpp no match for 'operator<<' in '((std::basic_istream<char, std::char_traits<char> >)(&datin))->std::basic_istream<_CharT, _Traits>::operator>> [with _CharT = char, _Traits = std::char_traits<char>](((int&)(((int)((+(((unsigned int)y) * 12u)) + liste)) + 4u))) << " "'

    109 C:\Dev-Cpp\my projekts\kuh\kjgljh.cpp no match for 'operator<<' in '((std::basic_istream<char, std::char_traits<char> >)(&datin))->std::basic_istream<_CharT, _Traits>::operator>> [with _CharT = char, _Traits = std::char_traits<char>](((float&)(((float)((+(((unsigned int)y) * 12u)) + liste)) + 8u))) << std::endl'

    C:\Dev-Cpp\my projekts\kuh\Makefile.win [Build Error] [kjgljh.o] Error 1



  • Erstens: Kannst du bitte aufhören, Uralt-Threads aus der Versenkung zu holen, die überhaupt nichts mit deinem Problem zu tun haben (außer dem ähnlichen Namen)
    Zweitens: sfds
    Drittens: In einen Eingabe-Stream kannst du nichts schreiben - lass mal den Teil <<" " bzw. <<endl in den angemeckerten Zeilen weg.



  • soll ich alle 3 zeilen löschen oder was, kannst du mir bitte helfen diesen problem zu lössen wie kann ich sonst danten über name laden wenn nid so



  • Nein, nur den Teil der versucht etwas in den Eingabestream auszugeben. Aus datin>>liste[y].name<<" "; wird damit datin>>liste[y].name; (die anderen Zeilen analog)

    Edit: Um das Problem nicht unnötig zu zerteilen, mache ich hier dicht - dort geht's weiter


Log in to reply