fstream: Datei kann nicht geöffnet werden
-
Hallo Community,
ich bin neu hier und hoffe ihr könnt mir helfen.
Ich beschäftige mich zur Zeit mit "fstream" und habe 2 Probleme die ich alleine nicht lösen konnte.
Der nachfolgende Code funktionier soweit einwandfrei, nur das mein Programm mir die standort.txt Datei nicht erstellt bzw. nicht öffnen kann. Warum ist dies so?#include <iostream> #include <string> #include <limits> #include <fstream> using namespace std; // Funktion: Zeichenpuffer leeren void delzpuf(){ cin.ignore(numeric_limits<streamsize>::max(),'\n'); } string fu_standort(); int main(){ fstream test; string spath = "test\\"; // Ornder Test ist schon vorhanden string standort = fu_standort(); delzpuf(); cout << "\nStandort: " << standort << endl; cout << '\n'; cout << standort << ".txt wird erstellt..." << endl; spath += standort; spath += ".txt"; test.open(spath.c_str(), ios::out, ios::trunc); if(test.is_open(), ios::out, ios::trunc){ cout << "Fehler beim erstellen von " << standort << ".txt" << endl; } else{ test << "Standort: " << standort; test.close(); } cout << '\n'; system("PAUSE"); return 0; } string fu_standort(){ string ort; int standort_contr; do{ cout << "-1- Nuernberg" << endl << "-2- Freiberg\n\n" << "Ihre Wahl: "; if(!(cin >> standort_contr)){ cout << "Fehler bei der Eingabe!"; cin.clear(); delzpuf(); getchar(); system("cls"); } else{ switch(standort_contr){ case 1: ort = "Nuernberg"; break; case 2: ort = "Freiberg"; break; default: cout << "Fehler bei der Eingabe!"; delzpuf(); getchar(); system("cls"); } } }while(standort_contr != 1 && standort_contr != 2); return ort; }Ein weiteres Problem habe ich mit diesem Code:
#include<iostream> #include<fstream> #include<string> using namespace std; int main(int argc, char argv){ string name, age; // Eingabe der Daten getline(cin, name); // Bsp. Alfred Musterman getline(cin, age); // Bsp. 25 Jahre cout << '\n'; // Ausgabe der Eingegebenen Daten cout << name << endl << age << "\n\n"; // Alfred Musterman, 25 Jahre // Neue Datei wird erstellt fstream testfile; testfile.open("test\\test.txt", ios::out, ios::trunc); if(testfile.is_open() != true){ cerr << "Fehler beim oeffnen der Datei!"; } else{ // Eingegebenen Daten in test.txt speichern testfile << name << endl // 1. Zeile << age; // 2. Zeile testfile.close(); cout << "Eingabe in test.txt gespeichert." << endl; getchar(); } // Öffnen der Datei test2.txt. Diese exestiert bereits mit folgenden Daten: // 1. Zeile Max Musterman // 2. Zeile 18 Jahre ifstream testfileread; testfileread.open("test\\test2.txt", ios::in); if(testfileread.is_open() != true){ cerr << "Fehler beim lesen der Datei!"; } else{ getline(testfileread, name); // 1. Zeile in name speichern getline(testfileread, age); // 2. Zeile in age speichern testfileread.close(); } cout << name << endl << age << "\n\n"; // Ausgabe des neuen Inhaltes von name und age (Max Musterman, 18 Jahre) system("PAUSE"); return 0; }Mein Programm erstellt mir die test.txt File mit den Eingebenen Daten fehlerfrei. Wenn ich jetzt test2.txt einlesen möchte und jede Zeile in den string name und age speichern möchte funktioniert meine letzte cout << name << endl << age; Zeile nicht mehr bzw. name und age sind leer. Warum?
Ich benutze Visual Studio Ultimate und programmiere demnach auf Windowsbasis.
MfG Domi
-
Deine Parameter bei open sind falsch.
Du mußt die einzelnen Flags "verodern":ios::out | ios::trunc(eigentlich müsste bei dir aber ein Compilerfehler kommen, denn 'open' hat eigentlich nur zwei Parameter
)
-
Th69 schrieb:
Deine Parameter bei open sind falsch.
Du mußt die einzelnen Flags "verodern":ios::out | ios::trunc(eigentlich müsste bei dir aber ein Compilerfehler kommen, denn 'open' hat eigentlich nur zwei Parameter
)Oh man, ich frage mich auch gerade warum das VS nicht als Fehler erkannt hat.
Jetzt funktionierts.
Aber das zweite Problem konnt ich noch nicht lösen...
-
Einen direkten Fehler in deinem Code sehe ich auf Anhieb nicht (man könnte einiges jedoch schöner machen -), daher folgende Vermutung:
Hast du die Datei "test2.txt" mit einem externem Editor erstellt? Wenn ja, evtl. eine falsche Codierung angegeben bzw. steht am Anfang ein Byte Order Mark (BOM)?
Lies einfach programmtechnisch mal ein paar Zeilen weiter und lass dir die Zeilen ausgeben bzw. teste mal nach jeder Zeile, ob der Stream in einen Fehlermodus gekommen ist (mittels "if (!testfileread)" ...
-
Th69 schrieb:
(eigentlich müsste bei dir aber ein Compilerfehler kommen, denn 'open' hat eigentlich nur zwei Parameter
)Niemand weiß, welche krummen zusätzlichen Parameter Microsoft da eingebaut hat, z.B. bools oder was in der Art, wo das Flag stillschweigend konvertiert wird. Einem VS6 traue ich da einiges zu

-
Ich mache so eine Testdatei zuverlässig so:
#include <iostream.h> // erforderliche Headers bereitstellen #include <fstream.h> #include <iomanip.h> ofstream test; // Ausgabestream bennennen ... test.open("test.txt"); // Testdatei öffnen test.open(ios::fixed): // Parameter der Testdatei setzen test.open(ios::floatfield); test.open(ios::showpoint); ... test << "Hallo, hier bin ich!" << endl; // irgendwas reinschreiben test.close(); // Testdatei schliessen
-
berniebutt schrieb:
Ich mache so eine Testdatei zuverlässig so:
#include <iostream.h> // erforderliche Headers bereitstellen #include <fstream.h> #include <iomanip.h> ofstream test; // Ausgabestream bennennen ... test.open("test.txt"); // Testdatei öffnen test.open(ios::fixed): // Parameter der Testdatei setzen test.open(ios::floatfield); test.open(ios::showpoint); ... test << "Hallo, hier bin ich!" << endl; // irgendwas reinschreiben test.close(); // Testdatei schliessen

-
Hallo berniebutt,
du meinst wohl eher
test.setf(ios::fixed): // ...?!?
Edit:
Und statt open am besten gleich im Konstruktor die Datei öffnen:ifstream test("test.txt"); if(!test) // fail
-
Th69 schrieb:
du meinst wohl eher
test.setf(ios::fixed): // ...Klar, muss test.setf(....) heissen! Manchmal ist man beim Schreiben eines Beitrages etwas schlampig. Danke für die Korrektur. Der Fragesteller sollte das jetzt selbst hinbekommen!
-
Danke für euere Hilfe, aber leider bekomm ich das Programm trotzdem nicht zum laufen. Was macht x.setf? Ich kenne .setf (noch) nicht...
-
Mit "setf" (SET FLAG) kannst du Flags setzen/ändern. Seihe MSDN für mehr Infos.

-
HighLigerBiMBam schrieb:
Mit "setf" (SET FLAG) kannst du Flags setzen/ändern. Seihe MSDN für mehr Infos.

Alles klar, verstanden.

-
Trollst du ??? http://lmgtfy.com/?q=c%2B%2B+setf