Stream schreiben, lesen
-
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.