Datei erstellen



  • Hallöchen,

    nun suche ich nach einer routine / befehl, mit dem man Dateien
    erstellen kann....
    und zwar soll das so ablaufen....
    es werden immer dateien desselben types erstell (wird vorher festgelgt, also z.B *.txt)
    dann wird im programm abgefragt:
    cout << "Speicherort: ";
    cin >> pfad;
    cout << "Dateiname: ";
    cin >> filename;

    dann mit den gegebenen Daten :
    create "pfad:\filename.txt";

    oder so in der art sollte es sein...

    wie lauten die befehle, gibts da schon fertige programme... ?

    THX



  • im c++ faq unter ströme nachschaun.



  • Und wie kann ich das jetzt zum Beispiel machen, das
    eine Variable eingelesen wird, die den Namen enthält, die die
    Datei später erhalten soll??
    Also z.B. so
    Name der Datei: Datei
    erstellt wird Datei.txt
    das prog funktioniert, versuche ich jedoch eine Variable als Dateinamen der zu erzeugenden datei
    einzusetzten geht es nicht mehr

    // Schreiben in eine Datei
    
    #include <string>							// Einbinden von string
    #include <windows.h>
    #include <fstream>
    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main()
    {
        // nocreate 
        fstream f("Datei.txt", ios::in); 
        /*if (f.good()) 
        {   // ok. Datei existiert. 
            f.close(); 
            f.open("Datei.txt", ios::out); 
            if (f.is_open()) 
            { 
                // Mit Datei arbeiten 
            } 
        } 
        else 
        { 
            cout << "Datei existiert nicht." << endl; 
        }*/
    
         // noreplace 
        fstream f2("Datei.txt", ios::in); 
        if (!f2) 
        {   // ok. Datei existiert nicht. Neu erstellen 
            f.clear(); 
            //f.open("Datei.txt", ios::out); 
    		f.open('datnam', ios::out); 
            if (f.is_open()) 
            { 
                // mit Datei arbeiten 
            } 
        } 
        else 
        { 
            cout << "Datei existiert bereits!" << endl; 
        }
    
    	return 0;
    }
    

    geändert habe ich nur

    char datnam;
    
    	cout << "Dateiname: ";
    	cin >> datnam;
    
    fstream f("Datei.txt", ios::in); /*zu*/ fstream f('datnam.txt', ios::in);
    und unten auch nochmal
    fstream f2("Datei.txt", ios::in); /*zu*/ fstream f2('datnam', ios::in);
    f.open("Datei.txt", ios::out); /*zu*/ f.open('datnam', ios::out);
    

    Danke



  • char datnam; // Warum reservierst du nur einen Byte Speicher für einen c-string?
    // Am besten nimm std::string
    
    	cout << "Dateiname: ";
    	cin >> datnam;
    
    // Warum schreibst du hier 'datnam.txt' und nicht datnam? Sprich warum übergibst du nicht die variable?
    fstream f("Datei.txt", ios::in); /*zu*/ fstream f('datnam.txt', ios::in); 
    fstream f2("Datei.txt", ios::in); /*zu*/ fstream f2('datnam', ios::in); // dito
    
    // Zwischendurch musst du den filestream von der Datei trennen. D.h. bevor du den filestream wieder mit einer neuen Datei verbindest musst du ein f.close() schreiben.
    f.open("Datei.txt", ios::out); /*zu*/ f.open('datnam', ios::out); // nochmals dito
    

    (Hoffentlich hab ich jetzt nichts übersehen)

    Eventuell zu beachten ist noch, dass der Backslash auch zum Maskieren verwendet wird. D.h. wenn du den Backslash wirklich verwenden möchtest einen "\" schreiben musst.

    Caipi



  • Guten morgen,

    habe das Programm wie folgt geändert, weiß aber nicht ob es richtig so ist

    // Schreiben in eine Datei
    
    #include <string>							// Einbinden von string
    #include <windows.h>
    #include <fstream>
    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main()
    {
    	std::string datnam;
    
    	cout << "Dateiname: ";
    	cin >> datnam;
    
    	// nocreate 
        //fstream f("Datei.txt", ios::in); 
    	fstream f(datnam, ios::in); 
        /*if (f.good()) 
        {   // ok. Datei existiert. 
            f.close(); 
            f.open("Datei.txt", ios::out); 
            if (f.is_open()) 
            { 
                // Mit Datei arbeiten 
            } 
        } 
        else 
        { 
            cout << "Datei existiert nicht." << endl; 
        }*/
    
    	f.close();
    	// noreplace 
        //fstream f2("Datei.txt", ios::in); 
    	fstream f2(datnam, ios::in); 
        if (!f2) 
        {   // ok. Datei existiert nicht. Neu erstellen 
            f.clear(); 
            //f.open("Datei.txt", ios::out); 
    		f.open(datnam, ios::out); 
            if (f.is_open()) 
            { 
                // mit Datei arbeiten 
            } 
        } 
        else 
        { 
            cout << "Datei existiert bereits!" << endl; 
        }
    
    	return 0;
    }
    

    Es kommen aber folgende Fehler:

    --------------------Konfiguration: create_file - Win32 Debug--------------------
    Kompilierung läuft...
    create_file.cpp
    C:\sources\create_file.cpp(21) : error C2664: '__thiscall std::basic_fstream<char,struct std::char_traits<char> >::std::basic_fstream<char,struct std::char_traits<char> >(const char *,int)' : Konvertierung des Parameters 1 von 'class std::basic_stri
    ng<char,struct std::char_traits<char>,class std::allocator<char> >' in 'const char *' nicht moeglich
            Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
    C:\sources\create_file.cpp(39) : error C2664: '__thiscall std::basic_fstream<char,struct std::char_traits<char> >::std::basic_fstream<char,struct std::char_traits<char> >(const char *,int)' : Konvertierung des Parameters 1 von 'class std::basic_stri
    ng<char,struct std::char_traits<char>,class std::allocator<char> >' in 'const char *' nicht moeglich
            Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
    C:\sources\create_file.cpp(44) : error C2664: 'void __thiscall std::basic_fstream<char,struct std::char_traits<char> >::open(const char *,int)' : Konvertierung des Parameters 1 von 'class std::basic_string<char,struct std::char_traits<char>,class st
    d::allocator<char> >' in 'const char *' nicht moeglich
            Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
    Fehler beim Ausführen von cl.exe.
    
    create_file.obj - 3 Fehler, 0 Warnung(en)
    

    Sagt mir alles nix



  • fstream f(datnam, ios::in);
    

    geht nicht, weil fstream einen char* haben mag und keinen string.

    so gehts:

    fstream f(datnam.c_str(), ios::in);
    

Anmelden zum Antworten