Datei erstellen, falls sie nicht existiert

Ozzy Ozborn

Erfahrenes Mitglied
Hi,

ich probiere schon die ganze Zeit in eine Datei zu schreiben, was auch mittlerweile funktioniert, aber leider nur, wenn die Datei schon extistiert! Das Öffnen der Datei sieht bei mir so aus:
Code:
void Statistics::Incoming(int time, float value) {
	fstream Datei("statistics/Incoming.txt", ios_base::in | ios_base::out);
	Datei.seekp(0, ios_base::end);
	Datei << time << " " << value << endl;
	Datei.close();
}
Aber wie mache ich es jetzt, dass er die Datei erstellt, wenn sie noch nicht existiert?

MfG, und schon einmal vielen Dank, Ozzy
 
Hallo,

welches OS benutzt du?
Dein code müsste die Datei eigentlich automatisch schreiben, wenn die Datei noch nicht existiert.
Die Zeile

Code:
Datei.seekp(0, ios_base::end);

irritiert mich etwas, wozu soll die gut sein?

Gruß
cesupa
 
Hi,

ich habe ein MacBook und benutze damit also OS X.
Die Zeile ist dafür da, dass wenn ich die Methode aufrufe, er ans Ende der Datei springt, um Daten hinein zu schreiben...

MfG, Ozzy
 
das hab ich mir schon so gedacht. Es wäre besser wenn du stattdessen ios_base::app benutzt. Dann hängt er an eine bestehende Datei automatisch alles hinten dran.

Gruß
cesupa
 
Hi.

Warum öffnest du die Datei denn im Lesen + Schreiben Modus?

Wenn du etwas an die Datei anhängen willst, öffne die Datei doch einfach im Schreiben+Anhängen Modus:
C++:
fstream datei("..", ios::out | ios::app);
Dann wird die Datei auch angelegt falls sie noch nicht existiert.

Gruß
 
Hallo,

nach langem Suchen hab ich bei mir einen Code für ein Highscore-Programm gefunden.
Vlt. hilf dir dieser weiter. Er erstellt die Datei, wenn diese nicht existiert und wenn sie existiert wird sie überschrieben...

Code:
#include <iostream>
#include <string>       //Strings
#include <fstream>      //Datei einlesen und ausgeben

using namespace std;


string dateiname = "test.txt";

int main()              //Hauptprogramm
{
    cout << " ";
    start:
   
    ifstream dat_ein;   //zum einlesen der Datei

    dat_ein.open(dateiname.c_str(), ios_base::in);   //test.txt einlesen
   
    if(!dat_ein)                    //wenn datei nicht existiert
    {
                ofstream dat_aus;
                dat_aus.open(dateiname.c_str(), ios_base::out);
               
                //zu speichernde Datei
               
                int highscore = 0;
                dat_aus << highscore << endl;
               
                dat_aus.close();     //ende von dat_aus

                goto start;          //goto zum start, damit das Programm nun starten kann
                }
               
   
    int highscore;
    int neu;
    dat_ein >> highscore;

    dat_ein.close();
   
    cout << "\n\n Highscore-Programm\n\n" << endl;
    cout << " Aktueller Highscore: " << highscore << endl;
    cout << "\n Geben Sie den neuen Highscore bitte nun ein: ";
    cin >> neu;
   
    //Highscore geknackt?
   
    if (neu <= highscore)    //Falls nicht -> Exit
    {
            cout << "\n\n ENDE " << endl;
    }
   
    else     //Falls doch -> Neuer Highscore speichern
    {
        cout << "\n\n Glueckwunsch! Highscore geknackt! " << endl;
        ofstream dat_aus;
        dat_aus.open(dateiname.c_str(), ios_base::out);
               
        //zu speichernde Datei
               
        dat_aus << neu << endl;
               
        dat_aus.close();
       
    }
         
    cout << "\n ";               
    system("PAUSE");
    return 0;
}
 
Zurück