2014-04-24 16 views
6

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?

Antwort

5

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.

+1

"offstream :: open" setzt standardmäßig auf "ios_base :: out" und "fstream :: open" standardmäßig auf "ios_base :: in |" ios_base :: out' –

+5

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

0

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.

+0

y! cite cppreference.com statt –

+1

http://en.cppreference.com/w/cpp/io – ooga

+0

@ 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? –