Ausgabe mit Datein
-
Wie bekomme ich es hin das ich etwas in eine Datei schreibe?
Ich habe schon etwas versucht dabei treten aber Probleme auf.1. Ich will nur etwas in eine Datei schreiben, denn müsste ich doch nur
#include <ofstream>
nehmen? Aber da meldet er mir ein Fehler.
2. In dem C++ Buch was ich mir gekauft habe steht:
// Definieren der Eingangsdatei ifstream quelle;// Datentyp für Eingabestrom
Aber wofür genau steht das?(in dem Beispiel vom Buch ist jedzt das einlesen beschrieben, aber ich habe vorher gegooglet und da wurde das mit der Ausgabe ähnlich gemacht halt nur mit "ofstream".
3. Ich muss ja die Datei erst mal öffnen dies habe ich so versucht:
ofstream ziel; ziel.open(test.txt.c_str(), ios::binary|ios::in);
Aber ich bekomme eine Fehlermeldung das "test nicht in diesem Gültigkeitsbereich definiert wurde".
4. Wenn ich die Datei denn geöffnet habe, kann ich da ja was reinschreiben aber wie genau? Mit dem Befehl put()?
Ich hoffe ihr könnt mir helfen
-
Klaro
Erstmal ist das mit der Datei abstrakt gesehen wie mit der Konsole, auch nur ein Outputstream
daher ist die Syntax praktisch gleich
#include <fstream> int main() { std::ofstream os("<Pfad>"); // überprüfen ob alles glatt läuft, obwohl Ausgabe meist nicht // so Fehleranfällig ist wie Eingabe os << "Hello World!"; }
Hello World!
-
Achso, ja, wenn die Datei nicht existiert dann wird übrigens einfach ne neue erstellt
-
Danke für die Antwort.
Im Buch ist das immernoch etwas anders.., und ich würde das gerne verstehen so wie das im Buch steht :pIch habe noch etwas experimentiert:
ofstream ziel(test.txt.c_str(),ios::binary|ios::out);
Aber er schreibt mir immernoch ein fehler...
-
Welchen Fehler?
Was soll das test.text.c_str()? meisnt du vielleicht "test.txt"?
Du willst wirklich in Bytes schreiben?
ios::out kannste weg lassentemplate<class T> char* as_bytes(T& i) { void* addr = &i; return static_cast<char*>(addr); } os.write(as_bytes(<was du schreiben willst>, sizeof(<was du schreiben willst>)
-
Hier das Beispiel aus dem Buch..
Ich wollte daraus einfach nur eine einfache Ausgabe ableiten:/* cppbuch/k2/datcopy.cpp Beispiel zum Buch von Ulrich Breymann: Der C++ Programmierer; Hanser Verlag Diese Software ist freie Software. Website zum Buch: http://www.cppbuch.de/ */ #include<string> #include<cstdlib> // für exit( ) #include<fstream> #include<iostream> using namespace std; int main( ) { // Definieren der Eingangsdatei ifstream quelle; // Datentyp für Eingabestrom string quelldateiname; cout << "Quelldatei? "; cin >> quelldateiname; // Datei öffnen: // nicht portabel: quelle.open(quelldateiname.c_str()); quelle.open(quelldateiname.c_str(), ios::binary|ios::in); //quelle.open(quelldateiname, ios::binary|ios::in); // neuer Standard // Ohne {\tt ios::binary} sind nur Textdateien kopierbar // (gilt nur für Windows) if (!quelle) { // Fehlerabfrage cerr << quelldateiname << " kann nicht geöffnet werden!\n"; exit(-1); } string zieldateiname; cout << "Zieldatei? "; cin >> zieldateiname; // Definieren und Öffnen der Ausgabedatei hier in einem Schritt // nicht portabel: ofstream ziel(zieldateiname.c_str()); ofstream ziel(zieldateiname.c_str(),ios::binary|ios::out); if (!ziel) { // Fehlerabfrage cerr << zieldateiname << " kann nicht geöffnet werden!\n"; exit(-1); } char ch; while (quelle.get(ch)) ziel.put(ch); // zeichenweise kopieren } // Dateien werden am Programmende automatisch geschlossen.
-
Was ist jetzt die Fehlermeldung, wo liegt das Problem?
Wo ist dein Code, der nicht macht was du willst? Hab bis jetzt nur kleine Ausschnitte gesehen und die waren ziemlich Fehlerhaft
was für einen sinn macht denn bitte
ofstream und ios::in ?
Was ist bitte ofstream os(test.text.c_str())?Hast du eine class test mit einem std::string Member text, welches den Dateipfad angibt, oder wie?
LG
-
Ich habe nichts.
Ich bin gerade dabei C++ zu lernen, und ich habe ein Buch ich bin gerade beim zweiten Kapitel angelangt. (Ein- und Ausgabe mit Datein).
Und ich probiere das dann immer aus. Und jedzt möchte ich etwas in eine Datei schreiben, aber ich bekomme das nicht hin deswegen bin ich ja jedzt hier :p
Und wie du mir das geschrieben hast wird das wohl richtig sein, Aber ich möchte das aus dem Buch ja auch verstehen, und nicht komplett andere Wörter dahin schreiben.
-
Wo ist dein Problem bei dem gezeigten Code?
-
...........
Der Code ist ein Beispiel aus dem Buch.
Aus dem Code wollte ich eigendlich eine einfache Ausgabe ableiten das bekomme ich aber nicht hin also frage ich euch.
-
Habe das nun so:
#include <iostream> #include <fstream> using namespace std; int main(){ ofstream ausgabe("test.txt"); ausgabe << "Haus" << endl; ausgabe.close(); return 0; }
Ich bekomme auch keinen Fehler mehr angezeigt, es klappt auch.
Ist das denn so richtig?
-
Ein char ist im Prinzip 1 Byte, d.h. du liest aus der einen Datei jedes byte und schreibst es in die andere... kenne Leute, die da gerne schreiben würden
for(char ch; quelle.get(ch);) ziel.put(ch);
^^
-
hardware schrieb:
kenne Leute, die da gerne schreiben würden
for(char ch; quelle.get(ch); ziel.put(ch))
-
Skeptar schrieb:
Habe das nun so:
#include <iostream> #include <fstream> using namespace std; int main(){ ofstream ausgabe("test.txt"); ausgabe << "Haus" << endl; ausgabe.close(); return 0; }
Ich bekomme auch keinen Fehler mehr angezeigt, es klappt auch.
Ist das denn so richtig?Wenn du einen Zeilenumbruch willst, nutze '\n' statt endl
ausgabe.close() kannst du weglassen, passiert automatisch, wenn ausgabe "out of scope" geht
LGP.S.: Sorry für meine zu vielen Posts, sollte mich mal einloggen, damit ich editieren kann^^
-
Skeptar schrieb:
Habe das nun so:
#include <iostream> #include <fstream> using namespace std; int main(){ ofstream ausgabe("test.txt"); ausgabe << "Haus" << endl; ausgabe.close(); return 0; }
Ich bekomme auch keinen Fehler mehr angezeigt, es klappt auch.
Ist das denn so richtig?Rein formal ja.
Allerdings zwei Dinge:
- endl ist nicht einfach nur eine Ausgabe von '\n', es wird auch geflusht. Meistens willst du das nicht, deswegen schreib einfach nur '\n'
- du musst den Stream nicht closen, das erledigt der Destruktor von ofstream automatischEdit: Verdammt, zu spät.
-
Okey danke.
In der Schule hat der Lehrer uns das mit << endl; beigebracht. Ich versuche jedzt immer \n zu schreiben aber klappt nicht immer wie man sieht. ABer es ist nicht falsch mitausgabe.close();
?
-
Skeptar schrieb:
Okey danke.
In der Schule hat der Lehrer uns das mit << endl; beigebracht. Ich versuche jedzt immer \n zu schreiben aber klappt nicht immer wie man sieht. ABer es ist nicht falsch mitausgabe.close();
?
Es ist überflüssig.
-
Das Problem ist ganz offensichtlich das Buch. Was ließste denn da?
-
out schrieb:
Das Problem ist ganz offensichtlich das Buch. Was ließste denn da?
AH, da oben stehts ja, du ließt den Breymann. Der ist gut. Aber steht da echt open und close drin, und exit? Muss ich mal nachschauen.
-
Ja da steht halt das man das generell auch nicht machen muss
Danke für die Hilfe :p