Axa Assurance Maroc - Insurer Innovation Award 2024
17 files and streams
1. Files and Streams
09/04/131 VIT - SCSE
By
G.SasiKumar., M.E., (Ph.D).,
Assistant Professor
School of Computing Science and Engineering
VIT University
2. 09/04/132 VIT - SCSE
Files
Diskette
Memory
Input file
Output file
Used to transfer data to and from disk
3. 09/04/133 VIT - SCSE
Streams
Stream
a channel or medium where data are passed to receivers from
senders.
Output Stream
a channel where data are sent out to a receiver
cout; the standard output stream (to monitor)
the monitor is a destination device
Input Stream
a channel where data are received from a sender
cin; the standard input stream (from the keyboard)
the keyboard is a source device
4. 09/04/134 VIT - SCSE
Standard Input / Output Streams
Standard Streams use #include <iostream.h>
Standard Input Stream
cin names the stream
the extractor operator >> extracts, gets, or receives the next element from the
stream
Standard Output Stream
cout names the stream
the inserter operator << inserts, puts, or sends the next element to the stream
Opening & closing of the standard streams occur automatically when
the program begins & ends.
5. 09/04/135 VIT - SCSE
File Streams
Files
data structures that are stored separately from the program (using
auxiliary memory)
streams must be connected to these files
Input File Stream
extracts, receives, or gets data from the file
Output File Stream
inserts, sends, or puts data to the file
#include <fstream.h> creates two new classes
ofstream (output file stream)
ifstream (input file stream)
6. 09/04/136 VIT - SCSE
C++ Files and Streams
C++ views each files as a sequence of bytes.
Each file ends with an end-of-file marker.
When a file is opened, an object is created and a stream is
associated with the object.
To perform file processing in C++, the header files
<iostream.h> and <fstream.h> must be included.
<fstream.> includes <ifstream> and <ofstream>
10. 09/04/1310 VIT - SCSE
Opening Files
Use open function or include file name when declaring
variable:
ifstream inobj1;
inobj1.open(“in1.dat”)
ifstream inobj2(“in2.dat”);
To check if file successfully opened check object in
condition:
if (!inobj1)
cout << “Unable to open file in1.dat” << endl;
11. 09/04/1311 VIT - SCSE
Opening Output Files
Ofstream outClientFile(“clients.dat”, ios:out)
OR
Ofstream outClientFile;
outClientFile.open(“clients.dat”, ios:out)
Example
ofstream out(“outf”,ios::out | ios::append);
// out is an append connection to outf
12. 09/04/1312 VIT - SCSE
File Open Modes
ios:: app - (append) write all output to the end of file
ios:: ate - data can be written anywhere in the file
ios:: binary - read/write data in binary format
ios:: in - (input) open a file for input
ios::out - (output) open a file for output
ios: trunc -(truncate) discard the files’ contents if
it exists
ios:nocreate - if the file does NOT exists, the open operation fails
ios:noreplace - if the file exists, the open operation fails
13. 09/04/1313 VIT - SCSE
Closing a File
Use close() on object to close connection to file:
ifstream in(“in.dat”);
…
in.close();
14. 09/04/1314 VIT - SCSE
#include <stdlib.h>
#include <iostream.h>
#include <fstream.h>
void main() {
char infname[101];
char outfname[101];
char buffer[101];
cout << ”File to copy from: ";
cin >> infname;
ifstream in(infname);
if (!in) {
cout << "Unable to open " << infname
<< endl;
exit(0);
}
cout << "File to copy to: ";
cin >> outfname;
ofstream out(outfname,ios::out |
ios::noreplace);
if (!out) {
cout << "Unable to open " <<
outfname << " -- already exists!" <<
endl;
exit(0);
}
in.getline(buffer,100);
while (!in.eof()) {
out << buffer << endl;
in.getline(buffer,100);
}
in.close();
out.close();
}
15. Using Sequential Access Files
A sequential access file is often called a text file
Bit - smallest data item
value of 0 or 1
Byte – 8 bits
used to store a character
Decimal digits, letters, and special symbols
Field - group of characters conveying meaning
Example: your name
Record – group of related fields
Represented a struct or a class
Example: In a payroll system, a record for a particular employee that
contained his/her identification number, name, address, etc.
File – group of related records
Example: payroll file
Database – group of related files
09/04/1315 VIT - SCSE
16. 09/04/1316 VIT - SCSE
The Data Hierarchy
Record key
identifies a record to facilitate the retrieval of specific records from a file
Sequential file
records typically sorted by key
1
01001010
Judy
Judy Green
Sally Black
Tom Blue
Judy Green
Iris Orange
Randy Red
File
Record
Field
Byte (ASCII character J)
Bit
17. 09/04/1317 VIT - SCSE
Files and Streams
C++ views each file as a sequence of bytes
File ends with the end-of-file marker
Stream created when a file is opened
File processing
Headers <iostream.h> (cout, cin, cerr, clog)
and <fstream.h>
class ifstream - input
class ofstream - output
class fstream - either input or output
18. 09/04/1318
VIT - SCSE
Creating a Sequential Access
File
Files are opened by creating objects of stream classes
ifstream, ofstream or fstream
File stream member functions for object file:
file.open(“Filename”, fileOpenMode);
file.close();
destructor automatically closes file if not explicitly closed
File open modes:
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::in Open a file for input.
ios::out Open a file for output.
ios::trunc Discard the file’s contents if it exists (this is
also the default action for ios::out)
ios::binary Open a file for binary (i.e., non-text) input or
output.
Makes a "line of
communication"
with the object and
the file.
19. 09/04/1319 VIT - SCSE
File position pointer
<istream> and <ostream> classes provide member functions for
repositioning the file pointer (the byte number of the next byte
in the file to be read or to be written.)
These member functions are:
seekg (seek get) for istream class
seekp (seek put) for ostream class
20. 09/04/1320
VIT - SCSE
Examples of moving a file
pointer
inClientFile.seekg(0) - repositions the file get pointer to the beginning
of the file
inClientFile.seekg(n, ios:beg) - repositions the file get pointer to the
n-th byte of the file
inClientFile.seekg(m, ios:end) -repositions the file get pointer to the
m-th byte from the end of file
nClientFile.seekg(0, ios:end) - repositions the file get pointer to the
end of the file
The same operations can be performed with <ostream>
function member seekp.
21. 09/04/1321
VIT - SCSE
Member functions tellg() and
tellp().
Member functions tellg and tellp are provided to return the
current locations of the get and put pointers, respectively.
long location = inClientFile.tellg();
To move the pointer relative to the current location use ios:cur
inClientFile.seekg(n, ios:cur) - moves the file get pointer n bytes
forward.
22. 09/04/1322
VIT - SCSE
Updating a sequential file
Data that is formatted and written to a sequential file cannot
be modified easily without the risk of destroying other data
in the file.
If we want to modify a record of data, the new data may be
longer than the old one and it could overwrite parts of the
record following it.
23. Problems with sequential files
Sequential files are inappropriate for so-called “instant access”
applications in which a particular record of information must
be located immediately.
These applications include banking systems, point-of-sale
systems, airline reservation systems, (or any data-base
system.)
09/04/1323
VIT - SCSE
24. Random access files
Instant access is possible with random access files.
Individual records of a random access file can be accessed
directly (and quickly) without searching many other
records.
09/04/1324
VIT - SCSE
25. Creating a Random Access
Filewrite - outputs a fixed number of bytes beginning at a
specific location in memory to the specified stream
When writing an integer number to a file,
outFile.write( reinterpret_cast<const char *>( &number ),
sizeof( number ) );
First argument: pointer of type const char * (location to
write from)
address of number cast into a pointer
Second argument: number of bytes to write(sizeof(number))
recall that data is represented internally in binary (thus, integers can be
stored in 4 bytes)
Do not use
outFile << number;
could print 1 to 11 digits, each digit taking up a byte of storage
09/04/1325
VIT - SCSE
27. Writing Data Randomly to a
Random Access File
seekp can be used in combination with write to store data
at exact locations in an output file
09/04/1327
VIT - SCSE
29. The <istream> function read
inCredit.read (reinterpret_cast<char *>(&client),
sizeof(clientData));
The <istream> function inputs a specified (by
sizeof(clientData)) number of bytes from the current
position of the specified stream into an object.
09/04/1329
VIT - SCSE