Problem mit fstream::open(..)
-
Wieso erzeugt dieser Code keine neue Datei ?
#include <fstream> using namespace std; int main() { fstream datei; datei.open("datei.txt", ios::in | ios::out); datei.close(); return 0; }
Ich kompiliere den Code mit GCC 3.3.3.
Kann mir jemand helfen ?
-
Du wirst Dich wohl oder übel zwischen ios::in und ios::out entscheiden müssen.
Ansonsten ist das allerdings ein Standard-C++-Problem, ich verschieb Dich mal.
PS: Das close ist eigentlich redundant.
-
Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Verstehe.
Beide Flags zusammen sind also nicht erlaubt.
Mit iso::out alleine funktioniert.
Ich dachte dass es vielleicht irgendwie mit dem copmiler(gcc unter Linux) zusammenhängt.
-
Marcin schrieb:
Beide Flags zusammen sind also nicht erlaubt.
Nein, entweder out oder in, ist doch auch logisch, oder?
Ich dachte dass es vielleicht irgendwie mit dem copmiler(gcc unter Linux) zusammenhängt.
Nope, Du musst Dich einfach entscheiden, ob Du eine Datei lesen oder schreiben möchtest, das hat mit dem verwendeten Compiler nicht viel zu tun.
-
mach das am besten so:
variante1:
#include <fstream> using namespace std; int main() { ofstream datei; datei.open("datei.txt"); // in die datei schreiben: // datei << "Teststring" << endl; datei.close(); return 0; }
variante 2:
#include <fstream> using namespace std; int main() { fstream datei; datei.open("datei.txt", ios::out); // in die datei schreiben: // datei << "Teststring" << endl; datei.close(); return 0; }
cu
-
warum sollte man nicht gleichzeitig lesen und schreiben dürfen?
fstream foo("foo", ios::in|ios::out); foo << "blubb"; foo.seekg(0, ios::beg); string x; foo >> x; cout << x;
das problem ist nur, dass die datei foo existieren muss, denn sonst kann sie nicht zum lesen geöffnet werden.
wenn sie nicht existiert, muss sie angelegt werden. so z.b.{ fstream foo("test", ios::in); if (!foo) fstream foo("test", ios::out); } fstream foo("test", ios::out|ios::in); cout << foo.is_open();
btw. muss man ios::in und ios::out nicht angeben, weil die beiden standardwerte des fstream ctors sind
fstream foo("foo"); //ist dasselbe wie fstream foo("foo", ios::in|ios::out);
-
cplusplus schrieb:
mach das am besten so:
[schnipp]generell: statt open den konstruktor nehmen und die aufgaben von close dem destruktor überlassen.
-
nman schrieb:
Nein, entweder out oder in, ist doch auch logisch, oder?
Ja, das habe ich auch gemeint.
davie schrieb:
das problem ist nur, dass die datei foo existieren muss
Genau,das war mein Problem.Die Datei wurde nicht erzeugt.
davie schrieb:
muss man ios::in und ios::out nicht angeben
Ja ist schon klar, aber da es nicht so funktioniert hat, wie ich es erwartet habe, wollte ich "nachhelfen".
Code von cplusplus:
#include <fstream> using namespace std; int main() { fstream datei; datei.open("datei.txt", ios::out); // in die datei schreiben: // datei << "Teststring" << endl; datei.close(); return 0; }
So habe ich das auch gelöst.
Danke für die Antworten.