Fstream

From Seo Wiki - Search Engine Optimization and Programming Languages
Jump to navigationJump to search

fstream is a standard C++ library that handles reading from and writing to files either in text or in binary formats. It is an object oriented alternative to C's FILE from the C standard library. fstream is the result of a multiple inheritance with ifstream and ofstream, which both inherit from ios.

Text Files in fstream

For text files, a common method includes using the << and >> syntax that is followed with cout in the iostream library. The following example creates a file called 'file.txt' and puts the text 'Hello World' followed by a newline into it.

#include <fstream>

int main()
{
    std::ofstream file;
    file.open("file.txt");
    file << "Hello world!\n";
    file.close();
}

Binary Files in fstream

Reading from and writing to binary files uses the following functions:

ostream& fstream::write(const char *s, streamsize n );
istream& fstream::read(char *s, streamsize n );

where s is the buffer written to or read from, and size is the number of bytes to read or write (streamsize being an implementation-defined typedef; likely int or long). CPlusPlus website explains that these functions are necessary as the use of "the extraction and insertion operators (<< and >>) and functions like getline is not efficient, since we do not need to format any data, and data may not use the separation codes used by text files to separate elements (like space, newline, etc...)."

The following example creates a file called 'file.bin', creates a 100 element buffer, and writes 20 bytes from the buffer into the file.

char buffer[100];

std::ofstream outFile;
outFile.open( "output.bin", ios::out | ios::binary );    //opens the file for binary output
outFile.write( buffer, 20 );                             //this writes 20 bytes from buffer to file.bin
outFile.close(); // Manually close the file.

std::ifstream inFile( "input.bin", ios::in | ios::binary ); 
inFile.read( buffer, 20 );
// The file will close itself when its destructor is called.

The sizeof operator can help properly read or write the correct number of bytes.

file.write(buffer, sizeof(int)*5); // Write five ints to file.

Initializing files

When initializing a file, there are several modes you can choose, depending on what operation or function you are using the file for. The different modes you can use are as follows:

Mode What it does
ios::in If the file does not exist, a new empty file is created. If the file exists, it is opened and made available for processing as input.
ios::out If the file does not exist, a new empty file is created, ready to be written to. If the file exists, it is opened, and the previous content in it is deleted, and is then made ready to be written to.
ios::trunc If the file does not exist, a new empty file is created. If the file exists, its content is deleted and it is treated as a new file.
ios::app If the file does not exist, a new empty file is created for writing to. If the file exists, it is opened for writing, and whatever is written to the file will be written at the end of the existing file, not overwriting any existing data.
ios::ate If the file does not exist, a new empty file is created and data is written to it, and afterwards to the end of the file. If the file exists, data will be written at the current position if there is data in the existing file.
ios::binary Opens the file as a binary file, for either input or output.

The following is a snippet of code that shows the function of these modes.

#include <fstream>

int main()
{
        std::ofstream ofile;
        ofile.open("ex.txt", ios::out); // opens file as output
        int x=1;           
        ofile<<x;
        ofile.close();
        //ex.txt is now "1" 
        std::ifstream ifile;
        ifile.open("ex.txt",ios::in); //opens file as input
        int a;
        ifile>>a;//a now equals 1
        a=2;
        ifile.close();
        ofile.open("ex.txt", ios::out|ios::trunc); //opens file as output
        //ex.txt is now empty due to ios::trunc
        ofile<<x;//write 1 to file
        //ex.txt is now "1"
        ofile.close();
        ofile.open("ex.txt", ios::out|ios::app); //open file as output
        ofile<<a;//write 2 to file
        //ex.txt is now "12"
        ofile.close();
        ofile.open("ex.txt", ios::in|ios::out|ios::ate); //open file as output
        ofile<<x;//write 1 to file
        //ex.txt is now "121"        
        ofile.close();                         
}
  • NOTE: for ios::ate, simply using this line of code: "ofile.open("ex.txt",ios::out|ios::ate);" will result in the file being overwritten as if ios::ate was not included in the function. Adding ios::in will enable this to function as described in the above table.

Member functions

Following is an incomplete list of functions in iostream library:

Name Description
(constructor) Construct an object and optionally open a file
rdbuf Get the filebuf object associated with the stream.
is_open Check if a file has been opened.
open Open a file.
close Close an open file.
members inherited from istream:
operator>> Performs a formatted input operation (extraction)
gcount Get number of characters extracted by last unformatted input operation
get Extract unformatted data from stream
getline Get a line from stream
ignore Extract and discard characters
peek Peek next character
read Read a block of data
readsome Read a block of data
putback Put the last character back to stream
unget Make last character got from stream available again
tellg Get position of the get pointer
seekg Set position of the get pointer
sync Synchronize stream's buffer with source of characters
members inherited from ostream:
operator<< Perform a formatted output operation (insertion).
flush Flush buffer.
put Put a single character into output stream.
seekp Set position of put pointer.
tellp Get position of put pointer.
write Write a sequence of characters.
members inherited from ios:
operator void * Convert stream to pointer.
operator ! evaluate stream object.
bad Check if an unrecoverable error has occurred.
clear Set control states.
copyfmt Copy formatting information.
eof Check if End-Of-File has been reached.
exceptions Get/set the exception mask.
fail Check if failure has occurred.
fill Get/set the fill character.
good Check if stream is good for i/o operations.
imbue Imbue locale.
narrow Narrow character.
rdbuf Get/set the associated streambuf object.
rdstate Get control state.
setstate Set control state.
tie Get/set the tied stream.
widen Widen character.
members inherited from ios_base:
flags Get/set format flags.
getloc Get current locale.
imbue Imbue locale.
iword Get reference to a long element of the internal extensible array.
precision Get/set floating-point decimal precision.
pword Get reference to a void* element of the internal extensible array.
register_callback Register event callback function.
setf Set some format flags.
sync_with_stdio Activates / Deactivates synchronization with cstdio functions. [static]
unsetf Clear format flag.
width Get/set field width.
xalloc Return a new index for the internal extensible array. [static]

See also ifstream, which is the C++ standard library class that enables input of data from files.

External References

If you like SEOmastering Site, you can support it by - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 and more...