Was ist der Unterschied zwischen:C++ - fstream und ofstream
fstream texfile;
textfile.open("Test.txt");
und
ofstream textfile;
textfile.open("Test.txt");
Ist ihre Funktion gleich?
Was ist der Unterschied zwischen:C++ - fstream und ofstream
fstream texfile;
textfile.open("Test.txt");
und
ofstream textfile;
textfile.open("Test.txt");
Ist ihre Funktion gleich?
ofstream
hat nur Methoden zum Ausgeben, also zum Beispiel, wenn Sie versucht haben textfile >> whatever
es würde nicht kompilieren. fstream
kann für die Eingabe und Ausgabe verwendet werden, aber was funktioniert, hängt von den Flags ab, die Sie an den Konstruktor/open
übergeben.
std::string s;
std::ofstream ostream("file");
std::fstream stream("file", stream.out);
ostream >> s; // compiler error
stream >> s; // no compiler error, but operation will fail.
Die Kommentare haben einige größere Punkte.
Werfen Sie einen Blick auf ihre Seiten auf cplusplus.com here und here.
ofstream
erbt von ostream
. fstream
erbt von iostream
, die von istream
und stream
erbt. Im Allgemeinen unterstützt ofstream
nur Ausgabeoperationen (d. H. Textdatei < < "Hallo"), während fstream
sowohl Ausgabe- als auch Eingabeoperationen unterstützt, aber abhängig von den Flags beim Öffnen der Datei. In Ihrem Beispiel ist der offene Modus standardmäßig 10. Der Standardöffnungsmodus von ofstream
ist ios_base::out
. Darüber hinaus wird ios_base::out
immer für ofstream-Objekte festgelegt (auch wenn explizit nicht im Argumentmodus festgelegt).
Verwendung ofstream
wenn textfile
zur Ausgabe nur, ifstream
eingabe nur, sowohl fstream
für Eingang und Ausgang. Dies macht Ihre Absicht offensichtlicher.
y! cite cppreference.com statt –
http://en.cppreference.com/w/cpp/io – ooga
@ Cheersandhth.-Alf cppreference.com ist hübscher, aber Google gibt mir cplusplus.com für 'C++ fstream' zurück. Was sind weitere Vorteile von cppreference.com gegenüber cplusplus.com? –
"offstream :: open" setzt standardmäßig auf "ios_base :: out" und "fstream :: open" standardmäßig auf "ios_base :: in |" ios_base :: out' –
Darüber hinaus schlägt im Falle von 'std :: fstream' der Versuch fehl, die Datei zu öffnen, wenn die Datei nicht existiert. Dies steht im Gegensatz zu "std :: ofstream", das eine Datei erstellt, wenn sie nicht gefunden werden kann. Man müsste das Flag 'std :: ios_base :: trunc 'beim Aufruf des Konstruktors oder' open() 'auf einem' std :: fstream' hinzufügen. – 0x499602D2