Balaguruswamy
Balaguruswamy
Balaguruswamy
Streams
Usage
We’ve used streams already
cin
Input from stream object connected to
keyboard
cout
Output to stream object connected to screen
Can define other streams
To or from files
Used similarly as cin, cout
File input and output
streams
Stream
s
File Input Stream – reads data from disk
file to the program.
5
Writing in a file
#include <iostream>
#include <fstream>
using namespace std;
int main () {
ofstream filestream("testout.txt");
if (filestream.is_open())
{
filestream << "Welcome .\n";
filestream << "C++ Tutorial.\n";
filestream.close();
}
else cout <<"File opening is fail.";
return 0;
}
Reading
#include <iostream>
#include <fstream>
using namespace std;
int main () {
string srg;
ifstream filestream("testout.txt");
if (filestream.is_open())
{
while ( getline (filestream,srg) )
{
cout << srg <<endl;
}
filestream.close();
}
else {
cout << "File opening is fail."<<endl;
}
return 0;
}
#include <fstream>
#include <iostream>
using namespace std;
int main () {
char input[75];
ofstream os;
os.open("testout.txt");
cout <<"Writing to a text file:" << endl;
cout << "Please Enter your name: ";
cin.getline(input, 100);
os << input << endl;
cout << "Please Enter your age: ";
cin >> input;
cin.ignore();
os << input << endl;
os.close();
ifstream is;
string line;
is.open("testout.txt");
cout << "Reading from a text file:" << endl;
while (getline (is,line))
{ cout << line << endl; }
is.close();
return 0;
The Data Hierarchy
(contd.)
From smallest to largest (continued)
Field: group of characters with some meaning
e.g., Your name
Record: group of related fields
struct or class in C++
In payroll system, could be name, S#, address, wage
Each field associated with same employee
Record key: field used to uniquely identify record
File: group of related records
Payroll for entire company
Database: group of related files
Payroll, accounts-receivable, inventory…
9
General File I/O
Steps
• Declare a file name variable
• Associate the file name variable with
the disk file name
• Open the file
• Use the file
• Close the file
10
Files and
Streams
C++ views file as sequence of bytes
Ends with end-of-file marker
0 1 2 3 4 5 6 7 8 9 ... n-1
... e nd-of-file marker
11
Creating a Sequential-Access
File
C++ imposes no structure on file
Concept of "record" must be implemented by programmer
To open file, create objects
Creates "line of communication" from object to file
Classes
ifstream(input only)
ofstream(output only)
fstream(I/O)
Constructors take file name and file-open mode
ofstream outClientFile( "filename", fileOpenMode );
To attach a file later
ofstream outClientFile;
outClientFile.open( "filename", fileOpenMode);
12
Creating a Sequential-Access
File
File-open modes
13
Creating a Sequential-Access
Operations File
Overloaded operator!
!outClientFile
Returns nonzero (true) if some error
Opening non-existent file for reading, no permissions, disk full etc.
Writing to file (just like cout)
outClientFile << myVariable
Closing file
outClientFile.close()
Automatically closed when destructor called
14
// Create a sequential file. #include <iostream>
#include <fstream> using namespace std;
int main() {
// ofstream constructor opens file ofstream
outClientFile( "clients.txt",
ios::out );
// exit program if unable to create file
if ( !outClientFile ) { // overloaded !
operator cout << "File could not be opened" <<
endl; exit( 1 );
} // end if
15
cout << "Enter the account, name, and balance." << endl
<< "Enter \’N\’ to end input.\n? ";
int account;
char name[ 30 ], ch=‘y’; double balance;
// read account, name and balance from cin, then place in
file while (ch == ‘y’) {
cin >> account >> name >> balance;
outClientFile << account << ' ' << name << ' ' << balance
<< endl; cout << "? ";
cin>>ch;
} // end while
18
const int ZERO = 0, CREDIT = 1, DEBIT = 2, END = 3;
int main()
{
// ifstream constructor opens the file
ifstream inClientFile( "clients.txt", ios::in );
int request;
int account; char name[ 30 ]; double
balance;
switch ( request ) {
case ZERO:
cout << "\nAccounts with zero balances:\n";
break;
case CREDIT:
cout << "\nAccounts with credit balances:\n";
break;
case DEBIT:
cout << "\nAccounts with debit balances:\n";
break;
20
} // end switch
// read account, name and balance from file
inClientFile >> account >> name >> balance;
// display record
if ( shouldDisplay( request, balance ) )
cout << account << ‘ ’<<name << ‘ ’<< balance << endl;
if( (req == ZERO && bal == 0) || (req == CREDIT && bal < 0) ||
(req == DEBIT && bal > 0) )
return true; else return false; 22
}
Reading Data from a Sequential-
Access File
File position pointers
Files have "get" and "put" pointers
Index of next byte to read/write
Functions to reposition pointer
seekg(seek get for istreamclass)
seekp(seek put for ostreamclass)
seekgand seekptake offset and direction
Direction (ios::begdefault)
ios::beg- relative to beginning of stream
ios::cur- relative to current position
ios::end- relative to end
Offset: number of bytes relative to direction 23
Reading Data from a Sequential-
Access File
Examples
fileObject.seekg(0)
Goes to start of file (location 0) because ios::beg
is default
fileObject.seekg(n)
Goes to nth byte from beginning
fileObject.seekg(n, ios::cur)
Goes n bytes forward from current position
fileObject.seekg(y, ios::end)
Goes y bytes back from end
fileObject.seekg(0, ios::cur)
Goes to last byte 24
seekpsimilar
Reading Data from a Sequential-
Access File
To find pointer location
tellg and tellp
int location = fileObject.tellg()
25
Storage in Sequential-Access
File
"1234567"(char *) vs 1234567(int)
char *takes 7 bytes (1 for each character)
inttakes fixed number of bytes
123 same size in bytes as 1234567
<<operator
outFile << number
Outputs number (int) as a char*
Variable number of bytes
26
Updating Sequential-Access
Filesfiles
Updating sequential
Risk overwriting other data
Example: change name "White" to "Worthington"
Old data
300 White 0.00 400 Jones 32.87
Insert new data
300 Worthington 0.00
27
Random-Access
Files
Instant access
Want to locate record quickly
Airline reservations, Banking system, ATMs
Sequential files must search through each one
Random-access files are solution
Instant access
Update/delete items without changing other data
28
Random-Access
Files
Programmer must create random-access files
Fixed-length records
Calculate position in file from record size and key
0 10 20 30 40 50
0 0 0 0 0
}byte offsets
}
}
}
}
}
}
100 100 100 100 100 100
byte byte byte byte byte byte
s s s s s s
29
<<operator vs. write()
outFile << number
Outputs number (int) as a char*
Variable number of bytes
outFile.write( const char *, size );
Outputs raw bytes
Takes pointer to memory location, number of bytes to write
Copies data directly from memory into file
Does not convert to char *
30
Creating a Random-Access
File
outFile.write( reinterpret_cast<const char *>(&number), sizeof( number
) );
&number is an int *
Convert to const char * with
reinterpret_cast
sizeof(number)
Size of number (an int) in bytes
read function similar (more later)
Must use write/read when using raw, unformatted data
Use ios::binary for raw writes/reads
31
• Command Line Argument in C++
If any input value is passed through command prompt at the time of
running of program is known as command line argument. It is a
concept to passing the arguments to the main() function by using
command prompt.
When Use Command Line Argument
When you need to developing an application for DOS operating
system then in that case command line arguments are used. DOS
operating system is a command interface operating system so by
using command we execute the program. With the help of
command line arguments we can create our own commands.
In Command line arguments application main() function will takes
two arguments that is;
argc
argv
argc: argc is an integer type variable and it holds total number of
arguments which is passed into main function. It take Number of
arguments in the command line including program name.
argv[]: argv[] is a char* type variable, which holds actual arguments
which is passed to main function.
• Compile and run CMD programs
• Command line arguments are not compile and run like normal C++
programs, these programs are compile and run on command
prompt. To Compile and Link Command Line Program we need
TCC Command.
• First open command prompt
• Follow you directory where your code saved.
• For compile -> C:/TC/BIN>TCC mycmd.cpp
• For run -> C:/TC/BIN>mycmd 10 20
• Explanation: Here mycmd is your program file name and TCC is a
Command. In "mycmd 10 20" statement we pass two arguments.
• #include<iostream.h>
• #include<conio.h>
• void main(int argc, char* argv[])
• { int i;
• clrscr();
• cout<<"Total number of arguments: "<<argc;
• for(i=0;i< argc;i++)
• { cout<<endl<< i;<<"argument: "<<argv[i]; getch();
• }}
• Output
• C:/TC/BIN>TCC mycmd.cpp C:/TC/BIN>mycmd 10 20 Number of
Arguments: 3 0 arguments c:/tc/bin/mycmd.exe 1 arguments: 10 2
arguments: 20
•