Professional Documents
Culture Documents
Presented by :
Er. …………………
Assistant Professor
Applied Science(CSE)
Chandigarh University
Gharuan (Mohali).
1. INTRODUCTION
Computer programs are associated to work with files as it
helps in storing data & information permanently.
File - itself a bunch of bytes stored on some storage devices.
In C++ this is achieved through a component header file
called fstream.h
The I/O library manages two aspects- as interface and for
transfer of data.
The library predefine a set of operations for all file related
handling through certain classes.
The fstream.h header file
A stream is a general term used to name flow of data.
Streams act as an interface between files and programs.
A Stream is sequence of bytes.
They represent as a sequence of bytes and deals with the
flow of data.
Every stream is associated with a class having member
functions and operations for a particular kind of data flow.
11
File Names
• All files are assigned a name that is used for
identification purposes by the operating
system and the user.
12
7. Focus on Software Engineering:
The Process of Using a File
• Using a file in a program is a simple three-step
process
– The file must be opened. If the file does not yet
exits, opening it means creating it.
– Information is then saved to the file, read from
the file, or both.
– When the program is finished using the file, the
file must be closed.
13
Figure 1
14
Figure 2
15
Setting Up a Program for File
Input/Output
• Before file I/O can be performed, a C++
program must be set up properly.
• File access requires the inclusion of fstream.h
16
Opening a File
• Before data can be written to or read from a
file, the file must be opened.
ifstream inputFile;
inputFile.open(“customer.dat”);
17
Program
// This program demonstrates the declaration of an fstream
// object and the opening of a file.
#include <iostream.h>
#include <fstream.h>
void main(void)
{
fstream dataFile; // Declare file stream object
char fileName[81];
cout << "Enter the name of a file you wish to open\n";
cout << "or create: ";
cin.getline(fileName, 81);
dataFile.open(fileName, ios::out);
cout << "The file " << fileName << " was opened.\n";
}
18
Program Output with Example Input
19
Table
20
Table
File Mode Flag Meaning
ios::app Append mode. If the file already exists, its
contents are preserved and all output is
written to the end of the file. By default, this
flag causes the file to be created if it does
not exist.
ios::ate If the file already exists, the program goes
directly to the end of it. Output may be
written anywhere in the file.
ios::binary Binary mode. When a file is opened in
binary mode, information is written to or
read from it in pure binary format. (The
default mode is text.)
ios::in Input mode. Information will be read from
the file. If the file does not exist, it will not
be created and the open function will fail.
21
Table continued
File Mode Meaning
Flag
ios::nocreate If the file does not already exist, this flag
will cause the open function to fail. (The file
will not be created.)
ios::noreplace If the file already exists, this flag will cause
the open function to fail. (The existing file
will not be opened.)
ios::out Output mode. Information will be written to
the file. By default, the file’s contents will
be deleted if it already exists.
ios::trunc If the file already exists, its contents will be
deleted (truncated). This is the default
mode used by ios::out.
22
Opening a File at Declaration
fstream dataFile(“names.dat”, ios::in | ios::out);
23
Program
// This program demonstrates the opening of a file at the
// time the file stream object is declared.
#include <iostream.h>
#include <fstream.h>
void main(void)
{
fstream dataFile("names.dat", ios::in | ios::out);
cout << "The file names.dat was opened.\n";
}
24
Program Output with Example Input
25
Closing a File
A File is closed by disconnecting it with the stream it is
associated with. The close( ) function is used to accomplish
this task.
Syntax:
Stream_object.close( );
Example :
fout.close();
Program
// This program demonstrates the close function.
#include <iostream.h>
#include <fstream.h>
void main(void)
{
fstream dataFile;
dataFile.open("testfile.txt", ios::out);
if (!dataFile)
{
cout << "File open error!" << endl;
return;
}
cout << "File was created successfully.\n";
cout << "Now closing the file.\n";
dataFile.close();
}
27
Program Output
28
Using << to Write Information to a
File
• The stream insertion operator (<<) may be
used to write information to a file.
outputFile << “I love C++ programming !”
29
Program
// This program uses the << operator to write information to a file.
#include <iostream.h>
#include <fstream.h>
void main(void)
{
fstream dataFile;
char line[81];
dataFile.open("demofile.txt", ios::out);
if (!dataFile)
{
cout << "File open error!" << endl;
return;
}
30
Program continues
31
Program Screen Output
32
Figure 12-3
33
Program 12-5
// This program writes information to a file, closes the file,
// then reopens it and appends more information.
#include <iostream.h>
#include <fstream.h>
void main(void)
{
fstream dataFile;
dataFile.open("demofile.txt", ios::out);
dataFile << "Jones\n";
dataFile << "Smith\n";
dataFile.close();
dataFile.open("demofile.txt", ios::app);
dataFile << "Willis\n";
dataFile << "Davis\n";
dataFile.close();
} 34
Output to File demofile.txt
Jones
Smith
Willis
Davis
35
Steps To Create A File
1. Declare an object of the desired file stream class(ifstream,
ofstream, or fstream)
Syntax
Stream_object.eof( );
Example :
fout.eof( );
Text File Functions
get() – read a single character from text file and store in a
buffer.
e.g file.get(ch);
e.g. file.put(ch);
6. Assume a text file “Test.txt” is already created. Using this file, write a
function to create three files “LOWER.TXT” which contains all the
lowercase vowels and “UPPER.TXT” which contains all the uppercase
vowels and “DIGIT.TXT” which contains all digits.
Binary File Functions
read( )- read a block of binary data or reads a fixed number of
bytes from the specified stream and store in a buffer.
class Phone
{
Char Phoneno[10]; int Calls;
public:
void Get() {gets(Phoneno); cin>>Calls;}
void Billing() { cout<<Phoneno<< “#”<<Calls<<endl;}
int GetCalls() {return Calls;}
};
Ans :
void Search()
{
Phone P;
fstream fin;
fin.open( “Phone.dat”, ios::binary| ios::in);
while(fin.read((char *)&P, sizeof(P)))
{
if(p.GetCalls() >800)
p.Billing();
}
Fin.close(); //ignore
}};
Write a function in C++ to add new objects at the bottom of a
binary file “STUDENT.DAT”, assuming the binary file is
containing the objects of the following class.
class STUD
{
int Rno;
char Name[20];
public:
void Enter()
{cin>>Rno;gets(Name);}
void Display(){cout<<Rno<<Name<<endl;}
};
Ans.
void searchbook(int bookno)
{ifstream ifile(“BOOK.DAT”,ios::in|ios::binary);
if(!ifile)
{cout<<”could not open BOOK.DAT file”; exit(-1);}
else
{BOOK b; int found=0;
while(ifile.read((char *)&b, sizeof(b)))
{if(b.RBno()==bookno)
{b.Display(); found=1; break;}
}
if(! found)
cout<<”record is not found “;
ifile.close();
}
}
Given a binary file PHONE.DAT, containing records of the
following class type
class Phonlist
{
char name[20];
char address[30];
char areacode[5];
char Phoneno[15];
public:
void Register()
void Show();
void CheckCode(char AC[])
{return(strcmp(areacode,AC);
};
Write a function TRANSFER( ) in C++, that would copy all
those records which are having areacode as “DEL” from
PHONE.DAT to PHONBACK.DAT.
Ans
void TRANSFER()
{
fstream File1,File2;
Phonelist P;
File1.open(“PHONE.DAT”, ios::binary|ios::in);
File2.open(“PHONEBACK.DAT”, ios::binary|ios::OUT)
while(File1.read((char *)&P, sizeof(P)))
{ if( p.CheckCode( “DEL”))
File2.write((char *)&P,sizeof(P)); }
File1.close();
File2.close();
}
File Pointer
The file pointer indicates the position in the file at which the
next input/output is to occur.
class stock
{
int Ino, Qty; Char Item[20];
public:
void Enter() { cin>>Ino; gets(Item); cin>>Qty;}
void issue(int Q) { Qty+=0;}
void Purchase(int Q) {Qty-=Q;}
int GetIno() { return Ino;}
};
void PurchaseItem(int Pino, int PQty)
{ fstream File;
File.open(“stock.dat”, ios::binary|ios::in|ios::out);
Stock s;
int success=0;
while(success= = 0 && File.read((char *)&s,sizeof(s)))
{
If(Pino= = ss.GetIno())
{
s.Purchase(PQty);
_______________________ // statement 1
_______________________ // statement 2
Success++;
}
}
if (success = =1)
cout<< “Purchase Updated”<<endl;
else
cout<< “Wrong Item No”<<endl;
File.close() ;
}
Ans
i) Statement 1 to position the file pointer to the appropriate
place so that the data updation is done for the required item.
File.seekp(File.tellg()-sizeof(stock);
OR
File.seekp(-sizeof(stock),ios::cur);
60
Table
Mode Flag Description
61
Table
Statement How it Affects the Read/Write Position
File.seekp(32L, ios::beg); Sets the write position to the 33rd byte
(byte 32) from the beginning of the file.
file.seekp(-10L, ios::end); Sets the write position to the 11th byte
(byte 10) from the end of the file.
file.seekp(120L, ios::cur); Sets the write position to the 121st byte
(byte 120) from the current position.
file.seekg(2L, ios::beg); Sets the read position to the 3rd byte
(byte 2) from the beginning of the file.
file.seekg(-100L, ios::end); Sets the read position to the 101st byte
(byte 100) from the end of the file.
file.seekg(40L, ios::cur); Sets the read position to the 41st byte
(byte 40) from the current position.
file.seekg(0L, ios::end); Sets the read position to the end of the
file.
62
Program
// This program demonstrates the seekg function.
#include <iostream.h>
#include <fstream.h>
void main(void)
{
fstream file("letters.txt", ios::in);
char ch;
file.seekg(5L, ios::beg);
file.get(ch);
cout << "Byte 5 from beginning: " << ch << endl;
file.seekg(-10L, ios::end);
file.get(ch);
cout << "Byte 10 from end: " << ch << endl;
63
Program continues
file.seekg(3L, ios::cur);
file.get(ch);
cout << "Byte 3 from current: " << ch << endl;
file.close();
}
64
Program Screen Output
65
The tellp and tellg Member
Functions
• tellp returns a long integer that is the
current byte number of the file’s write
position.
• tellg returns a long integer that is the
current byte number of the file’s read
position.
66
Program
// This program demonstrates the tellg function.
#include <iostream.h>
#include <fstream.h>
#include <ctype.h> // For toupper
void main(void)
{
fstream file("letters.txt", ios::in);
long offset;
char ch, again;
do
{
cout << "Currently at position " << file.tellg() << endl;
cout << "Enter an offset from the beginning of the file: ";
cin >> offset;
67
Program continues
file.seekg(offset, ios::beg);
file.get(ch);
cout << "Character read: " << ch << endl;
cout << "Do it again? ";
cin >> again;
} while (toupper(again) == 'Y');
file.close();
}
68
Program Output with Example Input
Currently at position 0
Enter an offset from the beginning of the file: 5
[Enter]
Character read: f
Do it again? y [Enter]
Currently at position 6
Enter an offset from the beginning of the file: 0
[Enter]
Character read: a
Do it again? y [Enter]
Currently at position 1
Enter an offset from the beginning of the file: 20
[Enter]
Character read: u
Do it again? n [Enter]
69
Opening a File for Both Input and
Output
• You may perform input and output on an fstream
file without closing it and reopening it.
70
Program
// This program sets up a file of blank inventory records.
#include <iostream.h>
#include <fstream.h>
void main(void)
{
fstream inventory("invtry.dat", ios::out | ios::binary);
Invtry record = { "", 0, 0.0 };
71
Program continues
72
Program Screen Output
73
Program
// This program displays the contents of the inventory file.
#include <iostream.h>
#include <fstream.h>
void main(void)
{
fstream inventory("invtry.dat", ios::in | ios::binary);
Invtry record = { "", 0, 0.0 };
74
Thanks……..