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);