Stream schreiben, lesen
-
Was heißt da "es klappt nicht"? Das Programm legt die Textdatei an, schreibt "Hallo" dort rein und schließt sie irgendwann wieder (spätestens bei Programmende). Danach kannst du dir die Datei z.B. im Notepad ansehen. Wenn du sie vom Programm aus ansehen willst, mußt du sie mit einem ifstream öffnen, einlesen und die Daten nach std::cout (die C++ Standardausgabe - normalerweise der Monitor) ausgeben.
-
CStoll schrieb:
Was heißt da "es klappt nicht"? Das Programm legt die Textdatei an, schreibt "Hallo" dort rein und schließt sie irgendwann wieder (spätestens bei Programmende). Danach kannst du dir die Datei z.B. im Notepad ansehen. Wenn du sie vom Programm aus ansehen willst, mußt du sie mit einem ifstream öffnen, einlesen und die Daten nach std::cout (die C++ Standardausgabe - normalerweise der Monitor) ausgeben.
hi cstoll

ifstream infile; ofstream outfile; outfile.open("new.txt"); outfile << "Hier steht ein Text"; // dieser text soll in der new.txt geschrieben werdenwenn ich diesen Code schreibe, das Programm kompiliere und anschließend ausführe, ist die Datei zwar angelegt, aber leer

ifstream bringt hier doch überhaupt nichts, glaub ich
Wie kann ich das schreiben, dass dort mein Text steht? (in der new.txt)
mfg
-
Sorry für doppelpost.
edit:
Wenn ich das schreibe:
ifstream infile; /*ofstream outfile; outfile.open("new.txt"); outfile << "DDD"; */ infile.open("new.txt"); cout << &infile;dann wird zwar etwas in der Konsole ausgegeben, aber ist nicht,das was ich wollte:
0012FEACich hab also die new.txt Datei schon vorher durch outfile.open("new.txt") erstellt, dann hab ich es auskommentiert, dann hab ich eiinen Text manuell bzw. selbstgeschrieben und nun infile geöffnet(also new.txt) und wollte mit der Standardausgabe infile ausgeben, also was in der Datei steht.
P.s: dies betrifft nicht mein problem, dass es nicht in der Datei steht, was ich mit outfile.open("new.txt") gemacht hab. Aber über Lösungen der beiden probleme würde ich mich freuen

-
Ich kann deinen Fehler nicht nachvollziehen. Folgendes Minimalprogramm erfüllt bei mir mit dem MinGW-Compiler den erwünschten Zweck.
#include <fstream> int main() { std::ofstream out("new.txt"); out << "Text"; }Und das Zweite erreichst du mit folgendem Code.
#include <fstream> #include <iostream> int main() { std::ifstream in("new.txt"); std::cout << in.rdbuf(); }
-
OhneName schrieb:
Ich kann deinen Fehler nicht nachvollziehen. Folgendes Minimalprogramm erfüllt bei mir mit dem MinGW-Compiler den erwünschten Zweck.
#include <fstream> int main() { std::ofstream out("new.txt"); out << "Text"; }Das erste funktioniert bei mir nicht, d.h dass nichts in der Datei "new.txt" drinnensteht, sie ist einfach nur leer.
Ich arbeite mit der kostenlosen version von microsoft, Vc++ 2005(express edition)OhneName schrieb:
Und das Zweite erreichst du mit folgendem Code.
#include <fstream> #include <iostream> int main() { std::ifstream in("new.txt"); std::cout << in.rdbuf(); }Das funzt wunderbar, danke

aber gibts nicht mehr solcher Sachen, wie ".rdbuf()" ? Welche funcs gibts noch?Mfg
-
Dann probier's mal so. Endl kopiert den Ausgabepuffer in die Datei.
#include <fstream> int main() { std::ofstream out("new.txt"); out << "Text" << std::endl; }Zum anderen:
http://www.cppreference.com/
-
thx

void X(std::string name) { std::ifstream address; address.open(name.c_str()); std::cout << address.rdbuf() << std::endl; } int main(int argc, _TCHAR* argv[]) { std::cout << "Willkommen\n" << std::endl; X("datei.txt"); std::cin.get(); return 0; }wieso kommt da nur "Willkommen" und der Rest der Datei nimmer? Ich hab ne datei.txt ja im exe verzeichnis, und da ist schon was reingeschrieben worden

-
Also bei mir funktioniert das bestens. Du solltest aber vielleicht noch prüfen, ob die Datei auch korrekt geöffnet wurde. Vielleicht macht dir ja noch irgend n Schreibschutz oder so Probleme.
#include <iostream> #include <fstream> void printFile(std::string fileName) { std::ifstream in(fileName.c_str()); if(!in) { std::cerr << "Konnte Datei nicht öffnen." << std::endl; } else { std::cout << in.rdbuf() << std::endl; } } int main() { std::cout << "Willkommen" << std::endl; printFile("datei.txt"); std::cin.get(); }
-
hmm sollte eig. auch sowas gehen:
#include <iostream> #include <fstream> void read_file(std::ostream&, const std::string&); int main() { std::cout << "Willkommen, " << std::endl; read_file(std::cout, "adresse.info"); std::cin.get(); } void read_file(std::ostream& out, const std::string& file_name) { std::ifstream file(file_name.c_str()); out << (!file ? "FEHLER: Datei konnte nicht geoeffnet werden!" : file.rdbuf()); }
-
@(D)Evil: Der Ansatz ist ja nicht schlecht, wird aber imho nicht durch den Compiler gelangen - ?: verlangt, daß die beiden letzten Operanden kompatible Typen haben und der kleinste gemeinsame Nenner von 'char*' und 'file_buf*' ist void* (was nur Müll ausgeben würde). Da bleibt dir wohl nur, if() zu verwenden.
-
CStoll schrieb:
?: verlangt, daß die beiden letzten Operanden kompatible Typen
Aha
was neues gelernt ...
-
Ok ... dann so:
std::ostream& read_file(std::ostream& out, const std::string& file_name) { std::ifstream file(file_name.c_str()); if (!file) { std::cerr << "FEHLER: Datei konnte nicht gefunden werden!" << std::endl; out.setstate(std::ios::failbit); return out; } return out << file.rdbuf();; }...
-
Warum alles so kompliziert???
#include<iostream> #include<fstream> #include<string> using namespace std; int main() { string string_in;//der string indem dann der Text gespeichert wird ifstream file;//file--> der name deines Streams file.open("file.txt",ios::in);//dateiname . und dann die Funktion open("hier dann deine Datei Adresse",ios::in);oder ios::out zum hinneinschreiben if(!file){cout<<"Sie haben scheiße gebaut!!!(zB die Datei file.txt ist falsch benannt)"<<endl;} file>>string_in;//eigentliches einlesen der Datei cout<<string_in;//aufdem Bildschirm ausgeben des Strings }
-
Ehm ja der Sinn deines Beitrages ist fraglich ^^
Aber ok ... ne was du da machst geht nur, wenn der Inhalt der Datei keine ' ' enthält ... dann hat std::ifstream auch einen Konstruktor der den Dateinamen annimmt. Die Datei schließt sich automatisch beim zerstören des Objektes.