datei erstellen falls nicht existent



  • Naja, die Frage steht komplett im Titel. Wenn ich einfach

    std::ifstream in("filename.dat");
    

    schreibe läuft das Programm und läuft und läuft und stürzt dann ab (ich denke weil es kein eof findet, das kurz darauf als whileabbruchbedingung steht.

    Vermutlich sehr simpel, aber ich hänge grad dran.



  • Ich bin mir nicht ganz sicher (weil Anfänger):

    Wenn du die Datei von Anfang an als ios::out öffnest, wird sie erstellt, falls nicht vorhanden.

    Also würde ich es so anstellen:

    fstream in("filename.dat", ios::out); //fstream statt ifstream. ios::out!
        dat.close();
        dat.open("filename.dat", ios::in);
    

    Ich schätze, der Code ist nicht sehr gut... Vor allen Dingen braucht man eine Fallunterscheidung, falls die Datei vorhanden ist, falls nicht:

    fstream in("filename.dat", ios::in);
    
        if(!in)                                //falls in == 0, sprich: nix geöffnet
            in.open("filename.dat", ios::out); //erstellt automatisch die Datei.
            // ... Schreibe in Datei, was nötig ist ... etc. //
    


  • Hallo

    Du kannst das auch mit boost machen. Da gibt es bei filesystem eine Funktion namens exist und der übergibst du den Dateinamen und bekommst true oder false.

    chrische



  • Vielen Dank, da ich aktuell noch keine nicht std Libraries nutze (glaub ich zumindest) werde ich (vorerst) noch dabei bleiben (für dieses Programm) und ne0rs Variante ausprobieren.

    Danke

    was mich aber stört:

    bei diesem code

    categories::categories(const string& filename){
    	ifstream in(filename.c_str(),ios::in);
    	catfile=filename;
    	while(!in.eof()){
    		string temp;
    		getline(in,temp);
    		vcat.push_back(temp);
    	}
    }
    

    kommt eben der Fehler. Hingegen bei diesem code:

    std::vector<std::string> catsfromfile(const std::string &filename) //Einlesen der Dateinamen aus Datei
    {
    	std::ifstream fil(filename.c_str());
    	std::string s;
    	std::vector<std::string> res;
    	while(std::getline(fil,s))
    		res.push_back(tolower(s));
    	return res;
    }
    

    funktionnierts auch wenn die datei nicht exisitiert... 2. ist so wie ich es am anfang gemacht habe, bin gerade dabei das Programm neu zu schreiben (bessere Struktur, enbringen des neu gelernten) und so wie ichs jetzt mache gehts nicht mehr. Irgendwie lustig.

    ok, hab jetzt variante 1 umgeschrieben auf:

    categories::categories(const string& filename){
    	ifstream in(filename.c_str(),ios::in);
    	catfile=filename;
    	string temp;
    	while(getline(in,temp)){
    		vcat.push_back(temp);
    	}
    }
    

    und jetzt gehts da auch... hätte ich auch direkt drauf kommen können. Die Datei wird hier natürlich erst später erstellt, also wenn ich tatsächlich was reinschreibe.


Anmelden zum Antworten