Difference between revisions of "cpp/io/basic fstream"
From cppreference.com
m (Update links.) |
(Added example) |
||
Line 56: | Line 56: | ||
{{cpp/io/basic_ios/inherit}} | {{cpp/io/basic_ios/inherit}} | ||
{{cpp/io/ios_base/inherit}} | {{cpp/io/ios_base/inherit}} | ||
+ | |||
+ | ===Example=== | ||
+ | {{example | ||
+ | |code= | ||
+ | #include <iostream> | ||
+ | #include <fstream> | ||
+ | #include <limits> | ||
+ | #include <string> | ||
+ | |||
+ | struct Birthday { long day, month, year; }; | ||
+ | |||
+ | class Entry { | ||
+ | std::string name; | ||
+ | Birthday bday; | ||
+ | public: | ||
+ | Entry(std::string name_, long day_, long month_, long year_) : | ||
+ | name(name_), bday({day_, month_, year_}) {} | ||
+ | void printToStdOut() { | ||
+ | std::cout << name << ' ' << bday.day << '/' << bday.month << '/' | ||
+ | << bday.year << '\n'; | ||
+ | } | ||
+ | //name and bday are private so we must make << and >> friends of the class | ||
+ | friend std::ostream &operator<<(std::ostream &, Entry &); | ||
+ | friend std::istream &operator>>(std::istream &, Entry &); | ||
+ | }; | ||
+ | |||
+ | std::ostream &operator<<(std::ostream &strm, Entry &e) { | ||
+ | //Since the length of e.name is not necessarily known at compile time, we | ||
+ | // can't simply use: strm.write(reinterpret_cast<char*>(&e), sizeof e); | ||
+ | unsigned int length = e.name.length(); | ||
+ | strm.write(reinterpret_cast<char*>(&length), sizeof length); | ||
+ | strm.write(&e.name[0], length); | ||
+ | strm.write(reinterpret_cast<char*>(&e.bday), sizeof e.bday); | ||
+ | return strm; | ||
+ | } | ||
+ | |||
+ | std::istream &operator>>(std::istream &strm, Entry &e) { | ||
+ | unsigned int length; | ||
+ | strm.read(reinterpret_cast<char*>(&length), sizeof length); | ||
+ | e.name.resize(length); | ||
+ | strm.read(&e.name[0], length); | ||
+ | strm.read(reinterpret_cast<char*>(&e.bday), sizeof e.bday); | ||
+ | return strm; | ||
+ | } | ||
+ | |||
+ | int main() { | ||
+ | Entry e("Alpha", 1, 1, -13820000000); | ||
+ | e.printToStdOut(); | ||
+ | |||
+ | std::string filename = "Test.b"; | ||
+ | std::ofstream ostrm; | ||
+ | //Open the file or else create it | ||
+ | ostrm.open(filename, std::fstream::binary); | ||
+ | if(!ostrm.is_open()) { | ||
+ | ostrm.clear(); | ||
+ | ostrm.open(filename, std::fstream::out); //Create the file | ||
+ | ostrm.close(); | ||
+ | ostrm.open(filename, std::fstream::binary); | ||
+ | if(!ostrm.good()) | ||
+ | return 1; | ||
+ | } | ||
+ | |||
+ | //write the Entry e to the file | ||
+ | ostrm << e; | ||
+ | ostrm.close(); | ||
+ | |||
+ | Entry e_recovered("Omega", 31, 12, std::numeric_limits<long>::max()); | ||
+ | e_recovered.printToStdOut(); | ||
+ | |||
+ | //Open the file for reading | ||
+ | std::ifstream istrm; | ||
+ | istrm.open(filename, std::fstream::binary); | ||
+ | if(!istrm.good()) | ||
+ | return 1; | ||
+ | |||
+ | //overwrite e_recovered with the values from istrm | ||
+ | istrm >> e_recovered; | ||
+ | istrm.close(); | ||
+ | |||
+ | e_recovered.printToStdOut(); | ||
+ | return 0; | ||
+ | } | ||
+ | |output= | ||
+ | Alpha 1/1/-13820000000 | ||
+ | Omega 31/12/9223372036854775807 | ||
+ | Alpha 1/1/-13820000000 | ||
+ | }} | ||
[[de:cpp/io/basic fstream]] | [[de:cpp/io/basic fstream]] |
Revision as of 09:29, 22 February 2017
Defined in header <fstream>
|
||
template< class CharT, |
||
The class template basic_fstream
implements high-level input/output operations on file based streams. It interfaces a file-based streambuffer (std::basic_filebuf) with the high-level interface of (std::basic_iostream).
A typical implementation of std::basic_fstream
holds only one non-derived data member: an instance of std::basic_filebuf<CharT, Traits>.
Inheritance diagram
Two specializations for common character types are also defined:
Defined in header
<fstream> | |
Type | Definition |
fstream
|
basic_fstream<char> |
wfstream
|
basic_fstream<wchar_t> |
Contents |
Member types
Member type | Definition |
char_type
|
CharT
|
traits_type
|
Traits ; the program is ill-formed if Traits::char_type is not CharT .
|
int_type
|
Traits::int_type
|
pos_type
|
Traits::pos_type
|
off_type
|
Traits::off_type
|
Member functions
constructs the file stream (public member function) | |
(destructor) [virtual] (implicitly declared) |
destructs the basic_fstream and the associated buffer, closes the file (virtual public member function) |
(C++11) |
moves the file stream (public member function) |
(C++11) |
swaps two file streams (public member function) |
returns the underlying raw file device object (public member function) | |
File operations | |
checks if the stream has an associated file (public member function) | |
opens a file and associates it with the stream (public member function) | |
closes the associated file (public member function) |
Non-member functions
specializes the std::swap algorithm (function template) |
Inherited from std::basic_istream
Member functions
Formatted input | |
extracts formatted data (public member function of std::basic_istream<CharT,Traits> )
| |
Unformatted input | |
extracts characters (public member function of std::basic_istream<CharT,Traits> )
| |
reads the next character without extracting it (public member function of std::basic_istream<CharT,Traits> )
| |
unextracts a character (public member function of std::basic_istream<CharT,Traits> )
| |
puts a character into input stream (public member function of std::basic_istream<CharT,Traits> )
| |
extracts characters until the given character is found (public member function of std::basic_istream<CharT,Traits> )
| |
extracts and discards characters until the given character is found (public member function of std::basic_istream<CharT,Traits> )
| |
extracts blocks of characters (public member function of std::basic_istream<CharT,Traits> )
| |
extracts already available blocks of characters (public member function of std::basic_istream<CharT,Traits> )
| |
returns number of characters extracted by last unformatted input operation (public member function of std::basic_istream<CharT,Traits> )
| |
Positioning | |
returns the input position indicator (public member function of std::basic_istream<CharT,Traits> )
| |
sets the input position indicator (public member function of std::basic_istream<CharT,Traits> )
| |
Miscellaneous | |
synchronizes with the underlying storage device (public member function of std::basic_istream<CharT,Traits> )
|
Member classes
implements basic logic for preparation of the stream for input operations (public member class of std::basic_istream<CharT,Traits> )
|
Inherited from std::basic_ostream
Member functions
Formatted output | |
inserts formatted data (public member function of std::basic_ostream<CharT,Traits> )
| |
Unformatted output | |
inserts a character (public member function of std::basic_ostream<CharT,Traits> )
| |
inserts blocks of characters (public member function of std::basic_ostream<CharT,Traits> )
| |
Positioning | |
returns the output position indicator (public member function of std::basic_ostream<CharT,Traits> )
| |
sets the output position indicator (public member function of std::basic_ostream<CharT,Traits> )
| |
Miscellaneous | |
synchronizes with the underlying storage device (public member function of std::basic_ostream<CharT,Traits> )
|
Member classes
implements basic logic for preparation of the stream for output operations (public member class of std::basic_ostream<CharT,Traits> )
|
Inherited from std::basic_ios
Member types
Member type | Definition |
char_type
|
CharT
|
traits_type
|
Traits
|
int_type
|
Traits::int_type
|
pos_type
|
Traits::pos_type
|
off_type
|
Traits::off_type
|
Member functions
State functions | |
checks if no error has occurred i.e. I/O operations are available (public member function of std::basic_ios<CharT,Traits> )
| |
checks if end-of-file has been reached (public member function of std::basic_ios<CharT,Traits> )
| |
checks if an error has occurred (public member function of std::basic_ios<CharT,Traits> )
| |
checks if a non-recoverable error has occurred (public member function of std::basic_ios<CharT,Traits> )
| |
checks if an error has occurred (synonym of fail()) (public member function of std::basic_ios<CharT,Traits> )
| |
checks if no error has occurred (synonym of ! fail()) (public member function of std::basic_ios<CharT,Traits> )
| |
returns state flags (public member function of std::basic_ios<CharT,Traits> )
| |
sets state flags (public member function of std::basic_ios<CharT,Traits> )
| |
modifies state flags (public member function of std::basic_ios<CharT,Traits> )
| |
Formatting | |
copies formatting information (public member function of std::basic_ios<CharT,Traits> )
| |
manages the fill character (public member function of std::basic_ios<CharT,Traits> )
| |
Miscellaneous | |
manages exception mask (public member function of std::basic_ios<CharT,Traits> )
| |
sets the locale (public member function of std::basic_ios<CharT,Traits> )
| |
manages associated stream buffer (public member function of std::basic_ios<CharT,Traits> )
| |
manages tied stream (public member function of std::basic_ios<CharT,Traits> )
| |
narrows characters (public member function of std::basic_ios<CharT,Traits> )
| |
widens characters (public member function of std::basic_ios<CharT,Traits> )
|
Inherited from std::ios_base
Member functions
Formatting | |
manages format flags (public member function of std::ios_base )
| |
sets specific format flag (public member function of std::ios_base )
| |
clears specific format flag (public member function of std::ios_base )
| |
manages decimal precision of floating point operations (public member function of std::ios_base )
| |
manages field width (public member function of std::ios_base )
| |
Locales | |
sets locale (public member function of std::ios_base )
| |
returns current locale (public member function of std::ios_base )
| |
Internal extensible array | |
[static] |
returns a program-wide unique integer that is safe to use as index to pword() and iword() (public static member function of std::ios_base )
|
resizes the private storage if necessary and access to the long element at the given index (public member function of std::ios_base )
| |
resizes the private storage if necessary and access to the void* element at the given index (public member function of std::ios_base )
| |
Miscellaneous | |
registers event callback function (public member function of std::ios_base )
| |
[static] |
sets whether C++ and C I/O libraries are interoperable (public static member function of std::ios_base )
|
Member classes | |
stream exception (public member class of std::ios_base )
| |
initializes standard stream objects (public member class of std::ios_base )
|
Member types and constants | |||||||||||||||||||||||||||||||||||||||
Type | Explanation | ||||||||||||||||||||||||||||||||||||||
stream open mode type
The following constants are also defined:
(typedef) | |||||||||||||||||||||||||||||||||||||||
formatting flags type
The following constants are also defined:
(typedef) | |||||||||||||||||||||||||||||||||||||||
state of the stream type
The following constants are also defined:
(typedef) | |||||||||||||||||||||||||||||||||||||||
seeking direction type
The following constants are also defined:
(typedef) | |||||||||||||||||||||||||||||||||||||||
specifies event type (enum) | |||||||||||||||||||||||||||||||||||||||
callback function type (typedef) |
Example
Run this code
#include <iostream> #include <fstream> #include <limits> #include <string> struct Birthday { long day, month, year; }; class Entry { std::string name; Birthday bday; public: Entry(std::string name_, long day_, long month_, long year_) : name(name_), bday({day_, month_, year_}) {} void printToStdOut() { std::cout << name << ' ' << bday.day << '/' << bday.month << '/' << bday.year << '\n'; } //name and bday are private so we must make << and >> friends of the class friend std::ostream &operator<<(std::ostream &, Entry &); friend std::istream &operator>>(std::istream &, Entry &); }; std::ostream &operator<<(std::ostream &strm, Entry &e) { //Since the length of e.name is not necessarily known at compile time, we // can't simply use: strm.write(reinterpret_cast<char*>(&e), sizeof e); unsigned int length = e.name.length(); strm.write(reinterpret_cast<char*>(&length), sizeof length); strm.write(&e.name[0], length); strm.write(reinterpret_cast<char*>(&e.bday), sizeof e.bday); return strm; } std::istream &operator>>(std::istream &strm, Entry &e) { unsigned int length; strm.read(reinterpret_cast<char*>(&length), sizeof length); e.name.resize(length); strm.read(&e.name[0], length); strm.read(reinterpret_cast<char*>(&e.bday), sizeof e.bday); return strm; } int main() { Entry e("Alpha", 1, 1, -13820000000); e.printToStdOut(); std::string filename = "Test.b"; std::ofstream ostrm; //Open the file or else create it ostrm.open(filename, std::fstream::binary); if(!ostrm.is_open()) { ostrm.clear(); ostrm.open(filename, std::fstream::out); //Create the file ostrm.close(); ostrm.open(filename, std::fstream::binary); if(!ostrm.good()) return 1; } //write the Entry e to the file ostrm << e; ostrm.close(); Entry e_recovered("Omega", 31, 12, std::numeric_limits<long>::max()); e_recovered.printToStdOut(); //Open the file for reading std::ifstream istrm; istrm.open(filename, std::fstream::binary); if(!istrm.good()) return 1; //overwrite e_recovered with the values from istrm istrm >> e_recovered; istrm.close(); e_recovered.printToStdOut(); return 0; }
Output:
Alpha 1/1/-13820000000 Omega 31/12/9223372036854775807 Alpha 1/1/-13820000000