0% found this document useful (0 votes)
236 views27 pages

CPP Chapter 7

This document discusses file input/output (I/O) in C++. It begins with an introduction to files and file streams. Files contain data stored under a name on a storage device. File streams connect files to programs and determine input or output direction. The document then covers opening, reading from, and writing to text files in C++ using file streams like ifstream and ofstream. It provides examples of declaring file streams, opening files, checking for open errors, reading/writing data with insertion/extraction operators, and closing files after processing. Overall, the document provides an overview of basic file I/O concepts and operations in C++.

Uploaded by

Eshetu Deresu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
236 views27 pages

CPP Chapter 7

This document discusses file input/output (I/O) in C++. It begins with an introduction to files and file streams. Files contain data stored under a name on a storage device. File streams connect files to programs and determine input or output direction. The document then covers opening, reading from, and writing to text files in C++ using file streams like ifstream and ofstream. It provides examples of declaring file streams, opening files, checking for open errors, reading/writing data with insertion/extraction operators, and closing files after processing. Overall, the document provides an overview of basic file I/O concepts and operations in C++.

Uploaded by

Eshetu Deresu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 27

Chapter 5

File I/O
Introduction
 Data hierarchy
0 and 1 (bits) –> Charcaters --> field ->Record -> files ->
database
 Files:
 Is a collection of data that is stored together under a
common name usually on a secondary storage device
 E.g. the C++ programs that you store on a disk
 Why use files?
 Convenient way to deal with large quantities of data
 Store data permanently (until file is deleted)
 Avoid having to type data into program multiple times
 Share data between programs
…introduction
 Terminology
 Input. Get input from/read a file.
 Output. Put data into/write a file
 To store and retrieve data on a file in C++ three items
are required:
 A file
 A file stream
 A mode
…introduction
 Files are physically stored on an external medium using
a unique name called external file name
 Streams is a one way transmission path that is used to
connect a file stored on a physical device to a program.
 I/O in C++ uses streams… flow of data into and/or out
of a program
 A stream is a data type (like int, double), but with
special properties.
 Associated with every file stream is a mode, which
determines the direction of data on transmission path
 To and from a file
…introduction
 Two file streams based on mode
 Input file stream – mode designated as input
 Output file stream – mode designated as output

Disk
#include <fstream.h> Output file stream
int main()
{
…. Input file stream
return 0;
}
…introduction
 There are two types of streams
 Text stream
 A text stream is a sequence of characters
 character translations may occur as required by the host environment
e.g.a new line may be converted to a carriage return/linefeed pair
 may not be a one-to-one relationship between the characters that are written
 Binary stream
 A binary stream is a sequence of bytes
 a one-to-one correspondence to those in the external device
 To use files we need to know:
 how to "connect" file to program
 how to tell the program to read data
 how to tell the program to write data
 error checking and handling EOF
 How to “disconnect” file from program
…introduction
 You associate (connect) a stream with a specific file by
performing an open operation
 Once a file is open, information can be exchanged
between it and a program – read and write operation
 All streams are the same but all files are not
…introduction
 You disassociate a file from a specific stream with a
close operation
 All files are closed automatically when the program
terminates normally
 Files are not closed when a program terminates abnormally
 If you close a file opened for output, then contents, if
any, of its associated stream are written to the
external device
 This process is referred to as flushing the stream
 Each stream that is associated with a file has a file
control structure of type FILE
The standard streams
 When program starts execution, three streams are
opened automatically.
 stdin -- standard input -- cin
 stdout -- standard output -- cout
 stderr -- standard error -- cerr
C++ File I/O
 To perform file I/O, the header file fstream.h is
required
 fstream.h defines several classes, including ifstream,
ofstream, and fstream
 ifstream - Can be used for File read/input operations
 ofstream - Can be used for File write/output operations
 fstream - Can be used for both read/write c++ file I/O operations
 These classes are derived form istream, ostream,
 istream and ostream are derived form ios
File processing

 In file processing, files are generally classified into two as


 Text file
 its content is treated as a sequence of characters
 can be accessed sequentially
 E.g. the value int count 321 stored in three byte considering the digit
sequence ‘3’, ‘2’, ‘1’
 Binary file
 record sequence in a binary format
 E.g. the value int count 321 stored in two byte since int requires two
byte to store any of its value
 0000 0001 0100 0001
Text File Processing
 File processing involves the following major steps
 Include fstream.h header file
 Declaring file variable identifier
 Opening the file
 Processing the file
 Closing the file when process is completed.
Using Files
1: To access file handling routines:
#include <fstream.h>

2:To declare variables that can be used to access file:


ifstream in_stream;
ofstream out_stream;

3: To open the file


in_stream.open("infile.txt");
out_stream.open("outfile.txt");

4:To see if the file opened successfully:


if (in_stream.fail())
{
cout << "Input file open failed\n";
exit(1); // requires <cstdlib>
}
…Using Files
5: To get data from a file (one option), must declare a variable to hold the data and
then read it using the extraction operator:
int num;
in_stream >> num;
[Compare: cin >> num;]

 6:To put data into a file, use insertion operator:


out_stream << num;
[Compare: cout << num;]
NOTE: Streams are sequential – data is read and written in order –
generally can't back up.

 7:When done with the file:


in_stream.close();
out_stream.close();
Opening and closing a file

 An open file is represented within a program by a stream object


 any input or output operation performed on this stream object will be
applied to the physical file associated
 In C++, you open a file by linking it to a stream
 Before you can open a file, you must first obtain a stream
 There are three types of streams
 ifstream in ; //input stream
 ofstream out ; // output stream
 fstream io ; // input and output
Opening
 Once you have declared a stream, you associate it with a file
by using the method open().
 Prototype
 void open (const char *filename, int mode, int access = filebuf::penprot );
 The value of the mode determines how the file is opened
 E.g
ifstream in_file;
in_file.open(“test.txt”); // open a file named test.txt for input
Opening …
 It is good programming practice to check that the
connection has been established successfully before
using it
 To check if a file stream was successful opening a file
 by calling to member is_open() with no arguments
 returns a bool value of true in the case that indeed the
stream object is associated with an open file, or false
otherwise
 E.g.
 if (myfile.is_open()) { /* ok, proceed with output */ }
 ifstream myStream ( "myfile" ); // open file for input
 The check can also made by using fail().
 Returns true if the open fails false otherwise
 E.g
ifstream in_file;
in_file.open(“test.txt”); // open a file named test.txt for input
if(in_file.fail())
{
cout<<“\nThe file was not successfully opened”;
exit(1); //exits the program – stdlib.h
}
 When we are finished with our input and output
operations on a file we have to close it using close()
 its resources become available again
 E.g. myfile.close();
Mode Description
ios::app Write all output to the end of the file
ios::ate Open a file for output and move to the end of the file
(normally used to append data to a file). Data can be
written anywhere in the file.
ios::binary Cause the file to be opened in binary mode.

ios::in Open a file for input


ios::nocreate If the file does not exist, the open operation fails.

ios::noreplace If the file exists, the open operation fails.

ios::out Open a file for output


ios:trunc Discard the file's content if it exists (this is also the
default action ios::out)
 ofstream, ifstream and fstream has a default mode

class default mode parameter

ofstream ios::out

ifstream ios::in

fstream ios::in | ios::out


Reading and Writing Text Files

 Simply use the << and >> operators


 same way you do when performing console I/O
 except that instead of using cin and cout, you substitute
a stream that is linked to a file
 E.g.
ofstream out ("inventory");  //ofstream out;
//out.open(“inventory”)

out <<"Radios" << 39.95 << endl;


out << "Toastors" << 19.95 << endl;
out.close ( );
#include <iostream.h>
#include <fstream.h>
int main () {
ofstream myfile;
myfile.open ("example.txt");
myfile << "Writing this to a file.\n";
myfile.close();
return 0;
}
 This code creates a file called example.txt and inserts
a sentence into it in the same way we are used to do
with cout, but using the file stream myfile instead.
Example 2: writing on a text file
#include <iostream>
#include <fstream>
using namespace std;
int main ()
{
ofstream myfile ("example.txt");
if (myfile.is_open())
{
myfile << "This is a line.\n";
myfile << "This is another line.\n";
myfile.close();
}
else
cout << "Unable to open file";
return 0;
}
Example 3: reading a text file
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main ()
{
string line;
ifstream myfile ("example.txt");
if (myfile.is_open())
{
while (! myfile.eof() )
{
getline (myfile,line);
cout << line << endl;
}
myfile.close();
}
else cout << "Unable to open file";
return 0;
}
Checking state flags
•There are functions that check the state of a stream with bool return type

Function Description

bad() Returns true if a reading or writing operation fails. For


example in the case that we try to write to a file that is not
open for writing or if the device where we try to write has
no space left.
fail() Returns true in the same cases as bad(), but also in the
case that a format error happens, like when an
alphabetical character is extracted when we are trying to
read an integer number.
eof() Returns true if a file open for reading has reached the end.
good() It is the most generic state flag: it returns false in the same
cases in which calling any of the previous functions would
return true.
 If the file can support position requests
 opening that file also initializes the file position indicator to the start of the
file
 each character is read from or written to the file, the position indicator is
incremented
 ifstream, like istream, has a pointer known as the get pointer
that points to the element to be read in the next input
operation.
 ofstream, like ostream, has a pointer known as the put pointer
that points to the location where the next element has to be
written.
 Finally, fstream, inherits both, the get and the put pointers,
from iostream (which is itself derived from both istream and
ostream
 Internal stream pointers that point to the reading or
writing locations
 tellg()
 return a value of the member type pos_type, which is an
integer data type representing the current position of the get
stream pointer
 tellp()
 return a value of the member type pos_type, which is an
integer data type representing the current position of the the
put stream pointer

You might also like