Erstellen einer Datei in C++
-
Verwenden von
std::fstream
,std::open
undstd::ios_base::out
zum Erstellen einer Datei in C++ -
Verwenden von
std::fstream
,std::open
undstd::ios_base::app
zum Erstellen einer Datei in C++ -
Verwenden von
std::fstream
und der Funktionfopen
zum Erstellen einer Datei in C++
![Erstellen einer Datei in C++](/img/Cpp/feature-image---cpp-create-file.webp)
In diesem Artikel werden verschiedene Methoden zum Erstellen einer Datei in C++ erläutert.
Verwenden von std::fstream
, std::open
und std::ios_base::out
zum Erstellen einer Datei in C++
Das Erstellen von Dateien ist im Allgemeinen mit dem Dateiöffnungsvorgang verbunden, bei dem die Dateistream-Struktur der entsprechenden physischen Datei auf der Festplatte zugeordnet wird. Normalerweise hängt die Dateierstellung von dem Modus ab, in dem das Programm die Datei öffnet. Es gibt mehrere Modi zum Öffnen einer Datei, z. B. den Nur-Schreib-Modus, den Nur-Lese-Modus, den Anhänge-Modus usw. Normalerweise soll in jedem Modus, in dem in die Datei geschrieben wird, eine neue Datei erstellt werden, wenn der angegebene Dateiname nicht vorhanden ist. Daher müssen wir die integrierte Funktion open
von std::fstream
aufrufen, um eine neue Datei mit dem Namen als erstem Argument string
zu erstellen. Das zweite Argument für open
gibt den Modus an, in dem der Dateistream geöffnet werden soll. Diese Modi werden von der Sprache vordefiniert (siehe Seite).
#include <fstream>
#include <iostream>
using std::cerr;
using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;
using std::string;
int main() {
string filename("output.txt");
fstream output_fstream;
output_fstream.open(filename, std::ios_base::out);
if (!output_fstream.is_open()) {
cerr << "Failed to open " << filename << '\n';
} else {
output_fstream << "Maecenas accumsan purus id \norci gravida pellentesque."
<< endl;
cerr << "Done Writing!" << endl;
}
return EXIT_SUCCESS;
}
Ausgabe:
Done Writing!
Verwenden von std::fstream
, std::open
und std::ios_base::app
zum Erstellen einer Datei in C++
Alternativ können wir die Datei im append
-Modus öffnen, der mit std::ios_base::app
gekennzeichnet ist, und den Stream bei jedem Schreiben am Ende der Datei positionieren. In diesem Modus wird auch davon ausgegangen, dass eine neue Datei erstellt wird, wenn sie im angegebenen Pfad nicht vorhanden ist. Beachten Sie, dass erfolgreich geöffnete Dateistreams mit der Funktion is_open
überprüft werden können, die true
zurückgibt, wenn der Stream zugeordnet ist.
#include <fstream>
#include <iostream>
using std::cerr;
using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;
using std::string;
int main() {
string text("Large text stored as a string\n");
string filename2("output2.txt");
fstream outfile;
outfile.open(filename2, std::ios_base::app);
if (!outfile.is_open()) {
cerr << "failed to open " << filename2 << '\n';
} else {
outfile.write(text.data(), text.size());
cerr << "Done Writing!" << endl;
}
return EXIT_SUCCESS;
}
Ausgabe:
Done Writing!
Verwenden von std::fstream
und der Funktion fopen
zum Erstellen einer Datei in C++
Eine weitere Option zum Erstellen einer Datei ist die Verwendung der C-Standardbibliotheksschnittstelle fopen
, die die Struktur FILE*
zurückgibt. Die Funktion akzeptiert zwei Argumente: eine Zeichenkette, die den zu öffnenden Dateipfadnamen angibt, und ein weiteres Zeichenkettenliteral, das den Modus angibt, in dem geöffnet werden soll. Es werden sechs gängige Modi definiert: r
- schreibgeschützt, wenn der Stream am Anfang positioniert ist, w
- schreibgeschützt - am Anfang, a
- schreibgeschützt (anhängen) - am Ende des Datei und die Plus-Versionen der drei - r
, w
, a
, die zusätzlich den entgegengesetzten Modus enthalten.
#include <fstream>
#include <iostream>
using std::cerr;
using std::cout;
using std::endl;
using std::fstream;
using std::ofstream;
using std::string;
int main() {
string text("Large text stored as a string\n");
fstream outfile;
string filename3("output3.txt");
FILE *o_file = fopen(filename3.c_str(), "w+");
if (o_file) {
fwrite(text.c_str(), 1, text.size(), o_file);
cerr << "Done Writing!" << endl;
}
return EXIT_SUCCESS;
}
Ausgabe:
Done Writing!
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook