Daten in eine Datei schreiben
-
Hallo.
Ich möchte gern Daten über das Konsolenfenster eingeben und in eine txt Datei speichern.
Ich weiß aber nicht genau wie das geht und welchen header ich da einbinden muss.
Auf der Cplusplus Reference Seite find ich nichts und google auch nichts.Danke im Vorraus
-
Hier haste was zum rumpsielen:
#include <iostream> #include <fstream> int main() { std::cout << "Gebe Zahlen ein (durch \' \' trennen) "; std::fstream datei("datei.txt", std::ios::out); //out: zum schreiben oeffnen std::string daten; std::getline(std::cin, daten); datei << daten; datei.close(); datei.clear(); datei.open("datei.txt", std::ios::in); //in: zum lesen oeffnen int zahl; for(unsigned i = 1; datei >> zahl; ++i) std::cout << "Zahl Nr. " << i << ": " << zahl << "\n"; }
Wenn du davon was nicht weißt, zb. clear() oder datei >> zahl, gucke hier:
http://cplusplus.com/reference/iostream/fstream/
Wenn das nix bringt, frag wieder hier.
-
#include <iostream> #include <fstream> #include <iterator> #include <algorithm> #include <string> int main() { std::string dateiname; std::cout << "Dateiname: "; std::cin >> dateiname; std::ofstream datei(dateiname.c_str(), std::ios::out); std::cin.unsetf(std::ios::skipws); std::copy(std::istream_iterator<char>(std::cin), std::istream_iterator<char>(), std::ostream_iterator<char>(datei) ); }
Ungetestet
Es wird nicht geprüft, ob die Datei erfolgreich geöffnet werden konnte. Außerdem funktionieren Dateinamen mit Leerzeichen nicht.
-
Also gleich mit Iteratoren von fstream und STL-Algorithmen zu kommen, nur damit man eine einfache Eingabe zu nem Einzeiler machen kann, ist für einen Anfänger nicht gerade hilfreich. Damit kann er sich ja auseinandersetzen, wenn er erstmal die einfache Ein- und Ausgabe mit Dateien und den Shift-Operatoren, sowie den Memberfunktionen wie get oder clear und das binäre Lesen und Schreiben gecheckt hat.
Wie man das ganze dann vereinfacht, kann man später angucken. Grundlagen sind wichtiger.Es sein denn natürlich, du wolltest dem google-faulen Typen mit einer unverständlichen Antwort einfach nicht weiterhelfen. Dann geht's aber schon noch ein bisschen kryptischer, denk ich mal
-
Danke für die Antworten.
Aber noch ne Frage: Wo speicherts diese Datei hin?
-
@Incocnito Genau, der shift Operator ist viel cooler:
#include <iostream> #include <fstream> int main() { if (auto file = std::ofstream("test.txt")) file << std::cin.rdbuf(); }
Die Datei wird unter Windows im Working-Directory der .exe angelegt.
-
cooky451 schrieb:
@Incocnito Genau, der shift Operator ist viel cooler:
Stimmt, das ging ja noch einfacher
-
In diesem speziellen Fall täte es auch
#include <fstream> #include <iostream> int main() { std::ofstream("test.txt") << std::cin.rdbuf(); }
Wenn im Fehlerfall eh kommentarlos abgebrochen werden soll, ist die Fehlerprüfung unnötig.
-
seldon schrieb:
In diesem speziellen Fall täte es auch
#include <fstream> #include <iostream> int main() { std::ofstream("test.txt") << std::cin.rdbuf(); }
Wenn im Fehlerfall eh kommentarlos abgebrochen werden soll, ist die Fehlerprüfung unnötig.
return !(std::ofstream("test.txt") << std::cin.rdbuf());
Kann man aber auch nehmen, nicht?
@Icognito: Das waren keine
fstream
sondernistream/ostream
-iteratorenEdit: Verbessert.