datei bleibt leer



  • dieses prog. zahl etwas (hier:die zahl 125)in eine datei schreiben:

    #include <iostream>
    #include <stdlib.h>
    #include <fstream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
      ofstream datei("c:\\test.txt");
    
      if (!datei) cout << "dong!fehler!\n";
      datei << 125;  
      datei.close();
    
      system("PAUSE");  
      return 0;
    }
    

    ich bin mir eigentlich sicher, dass alles richtig ist, scheinbar ist es dies aber nicht, denn die datei ist nachher immernoch leer..
    wie immer dankbar über jede hilfe 😉



  • sieht ok aus,
    probiere mal das hier

    datei << 125 << flush;
    


  • danke, werd ich machen.
    im moment bin ich an einem anderen comp, und hier klappt es auch ohne flush.



  • Also, wenn ich eine Zahl in eine Datei einschreiben will, mache ich folgendes:

    #include <iostream>
    #include <fstream>
    #include <string>

    int main()
    {
    ofstream dat_aus;
    int zahl = 125;
    string dateiname = "datei.txt";
    dat_aus.open(dateiname.c_str(), ios_base::out)
    dat_aus << zahl;
    }

    Wichtig ist, dass du noch eine Kontrollstruktur einbaust, die eine Fehlermeldung ausgibt falls die Datei nicht gefunden werden konnte, denn die Datei muss im Verzeichnis deines Projektes liegen. Vielleicht konnte dir das noch ein wenig weiterhelfen.



  • amichian schrieb:

    Also, wenn ich eine Zahl in eine Datei einschreiben will, mache ich folgendes:

    #include <iostream>
    #include <fstream>
    #include <string>
    
    int main()
    {
      ofstream dat_aus;
      int zahl = 125;
      string dateiname = "datei.txt";
      dat_aus.open(dateiname.c_str(), ios_base::out)  
      dat_aus << zahl;
    }
    

    Fast akzeptabel:

    #include <fstream>
    
    int main()
    {
    	std::ofstream dat_aus("datei.txt");
    	int zahl = 125;
    	dat_aus << zahl;
    }
    

    Den Dateinamen gibt man im Konstruktor an. Dann hast du RAII und die Datei wird automatisch geöffnet. Und ios_base::out ist bei ofstream Default, das brauchst du nicht anzugeben. 🙂



  • Gerard schrieb:

    sieht ok aus,
    probiere mal das hier

    datei << 125 << flush;
    

    Der Standard garantiert, dass im Destruktor der Destruktor des unterliegenden filebufs gerufen wird, dieser ruft close und das wiederum ruft flush, falls die Datei vorher geöffnet war.
    Also ist weder flush noch close wirklich notwendig.

    Ich glaub das Problem liegt irgendwo anders. Schreibschutz, Schreibrechte, falsche Datei angesehen - irgendwie sowas.

    Gruß
    Werner


Anmelden zum Antworten