# Datei erstellen, falls sie nicht existiert



## Ozzy Ozborn (20. Juli 2007)

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:

```
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


----------



## cesupa (20. Juli 2007)

Hallo,

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


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

irritiert mich etwas, wozu soll die gut sein?

Gruß
cesupa


----------



## Ozzy Ozborn (20. Juli 2007)

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


----------



## cesupa (20. Juli 2007)

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


----------



## deepthroat (20. Juli 2007)

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:
	
	
	



```
fstream datei("..", ios::out | ios::app);
```
Dann wird die Datei auch angelegt falls sie noch nicht existiert.

Gruß


----------



## deepthroat (20. Juli 2007)

cesupa hat gesagt.:


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


Nein, bei der Kombination in | out wird die Datei nicht erstellt wenn sie nicht existiert.

Gruß


----------



## Agent2 (20. Juli 2007)

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...


```
#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;
}
```


----------

