Files and Streams
09/04/131 VIT - SCSE
By
G.SasiKumar., M.E., (Ph.D).,
Assistant Professor
School of Computing Science and...
09/04/132 VIT - SCSE
Files
Diskette
Memory
Input file
Output file
Used to transfer data to and from disk
09/04/133 VIT - SCSE
Streams
Stream
a channel or medium where data are passed to receivers from
senders.
Output Stream
...
09/04/134 VIT - SCSE
Standard Input / Output Streams
Standard Streams use #include <iostream.h>
Standard Input Stream
c...
09/04/135 VIT - SCSE
File Streams
Files
data structures that are stored separately from the program (using
auxiliary mem...
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-fi...
09/04/137 VIT - SCSE
09/04/138 VIT - SCSE
File Handling Classes
Hierarchy Diagram
09/04/139 VIT - SCSE
iosios
streambufstreambuf ostreamostreamistreamistream
iostreamiostream
fstreamfstream
filebuffilebuf...
09/04/1310 VIT - SCSE
Opening Files
Use open function or include file name when declaring
variable:
ifstream inobj1;
in...
09/04/1311 VIT - SCSE
Opening Output Files
Ofstream outClientFile(“clients.dat”, ios:out)
OR
Ofstream outClientFile;
outCl...
09/04/1312 VIT - SCSE
File Open Modes
ios:: app - (append) write all output to the end of file
ios:: ate - data can be wri...
09/04/1313 VIT - SCSE
Closing a File
Use close() on object to close connection to file:
ifstream in(“in.dat”);
…
in.cl...
09/04/1314 VIT - SCSE
#include <stdlib.h>
#include <iostream.h>
#include <fstream.h>
void main() {
char infname[101];
char...
Using Sequential Access Files
A sequential access file is often called a text file
 Bit - smallest data item
value of 0...
09/04/1316 VIT - SCSE
The Data Hierarchy
Record key
identifies a record to facilitate the retrieval of specific records ...
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...
09/04/1318
VIT - SCSE
Creating a Sequential Access
File
Files are opened by creating objects of stream classes
ifstream, ...
09/04/1319 VIT - SCSE
File position pointer
<istream> and <ostream> classes provide member functions for
repositioning the...
09/04/1320
VIT - SCSE
Examples of moving a file
pointer
inClientFile.seekg(0) - repositions the file get pointer to the be...
09/04/1321
VIT - SCSE
Member functions tellg() and
tellp().
Member functions tellg and tellp are provided to return the
cu...
09/04/1322
VIT - SCSE
Updating a sequential file
Data that is formatted and written to a sequential file cannot
be modifie...
Problems with sequential files
Sequential files are inappropriate for so-called “instant access”
applications in which a p...
Random access files
Instant access is possible with random access files.
Individual records of a random access file can be...
Creating a Random Access
Filewrite - outputs a fixed number of bytes beginning at a
specific location in memory to the sp...
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include "clntdata.h"
int main()
{
ofstream outCredit( "cre...
Writing Data Randomly to a
Random Access File
seekp can be used in combination with write to store data
at exact location...
Reading data from a random file
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <stdlib.h>
#inclu...
The <istream> function read
inCredit.read (reinterpret_cast<char *>(&client),
sizeof(clientData));
The <istream> function ...
Upcoming SlideShare
Loading in …5
×

17 files and streams

1,243 views

Published on

Files and Streams

Published in: Technology, Education
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,243
On SlideShare
0
From Embeds
0
Number of Embeds
17
Actions
Shares
0
Downloads
131
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

17 files and streams

  1. 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. 2. 09/04/132 VIT - SCSE Files Diskette Memory Input file Output file Used to transfer data to and from disk
  3. 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. 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. 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. 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>
  7. 7. 09/04/137 VIT - SCSE
  8. 8. 09/04/138 VIT - SCSE File Handling Classes Hierarchy Diagram
  9. 9. 09/04/139 VIT - SCSE iosios streambufstreambuf ostreamostreamistreamistream iostreamiostream fstreamfstream filebuffilebuf ofstreamofstreamifstreamifstream fstreambasefstreambase
  10. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 25. Creating a Random Access Filewrite - 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
  26. 26. #include <iostream.h> #include <fstream.h> #include <stdlib.h> #include "clntdata.h" int main() { ofstream outCredit( "credit.dat", ios::ate ); if ( !outCredit ) { cerr << "File could not be opened." << endl; exit( 1 ); } cout << "Enter account number " << "(1 to 100, 0 to end input)n? "; clientData client; cin >> client.accountNumber; while ( client.accountNumber > 0 && client.accountNumber <= 100 ) { cout << "Enter lastname, firstname, balancen? "; cin >> client.lastName >> client.firstName >> client.balance; outCredit.seekp( ( client.accountNumber - 1 ) * sizeof( clientData ) ); outCredit.write( reinterpret_cast<const char *>( &client ), sizeof( clientData ) ); cout << "Enter account numbern? "; cin >> client.accountNumber; } return 0; } 09/04/1326 VIT - SCSE
  27. 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
  28. 28. Reading data from a random file #include <iostream.h> #include <iomanip.h> #include <fstream.h> #include <stdlib.h> #include "clntdata.h" void outputLine( ostream&, const clientData & ); int main() { ifstream inCredit( "credit.dat", ios::in ); if ( !inCredit ) { cerr << "File could not be opened." << endl; exit( 1 ); } cout << setiosflags( ios::left ) << setw( 10 ) << "Account" << setw( 16 ) << "Last Name" << setw( 11 ) << "First Name" << resetiosflags( ios::left ) << setw( 10 ) << "Balance" << endl; clientData client; inCredit.read( reinterpret_cast<char *>( &client ), sizeof( clientData ) ); while ( inCredit && !inCredit.eof() ) { if ( client.accountNumber != 0 ) outputLine( cout, client ); inCredit.read( reinterpret_cast<char *>( &client ), sizeof( clientData ) ); } return 0; } void outputLine( ostream &output, const clientData &c ) { output << setiosflags( ios::left ) << setw( 10 ) << c.accountNumber << setw( 16 ) << c.lastName << setw( 11 ) << c.firstName << setw( 10 ) << setprecision( 2 ) << resetiosflags( ios::left ) << setiosflags( ios::fixed | ios::showpoint ) << c.balance << 'n'; } 09/04/1328 VIT - SCSE
  29. 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

×