File. The information / data stored under a
specific name on a storage device, is called a file.
Stream. It refers to a sequence of bytes.
Text
file. It is a file that stores
information in ASCII characters. In text files, each line of text is terminated
with a special character known as EOL (End of Line) character or delimiter
character. When this EOL character is read or written, certain internal
translations take place.
Binary
file. It is a file that contains
information in the same format as it is held in memory. In binary files, no
delimiters are used for a line and no translations occur
here.
Classes for file stream operation
ofstream: Stream class to write on files
ifstream: Stream class to read from files
fstream: Stream class to both read and write from/to files.
ifstream: Stream class to read from files
fstream: Stream class to both read and write from/to files.
Opening a file
OPENING
FILE USING CONSTRUCTOR
ofstream outFile("sample.txt"); //output only
ifstream inFile(“sample.txt”); //input only
ofstream outFile("sample.txt"); //output only
ifstream inFile(“sample.txt”); //input only
OPENING
FILE USING open()
Stream-object.open(“filename”, mode)
Stream-object.open(“filename”, mode)
ofstream
outFile;
outFile.open("sample.txt");
ifstream inFile;
inFile.open("sample.txt");
outFile.open("sample.txt");
ifstream inFile;
inFile.open("sample.txt");
File
mode parameter
|
Meaning
|
ios::app
|
Append
to end of file
|
ios::ate
|
go to
end of file on opening
|
ios::binary
|
file
open in binary mode
|
ios::in
|
open
file for reading only
|
ios::out
|
open
file for writing only
|
ios::nocreate
|
open
fails if the file does not exist
|
ios::noreplace
|
open
fails if the file already exist
|
ios::trunc
|
delete
the contents of the file if it exist
|
All these flags can be combined using
the bitwise operator OR (|). For example, if we want to open the file
example.bin in binary mode to add data we could do it by the following call to
member function open():
fstream file;
file.open ("example.bin", ios::out | ios::app | ios::binary);
file.open ("example.bin", ios::out | ios::app | ios::binary);
Closing File
outFile.close();
inFile.close();
inFile.close();
INPUT AND OUTPUT OPERATION
put()
and get() function
the function put() writes a single character to the associated stream. Similarly, the function get() reads a single character form the associated stream.
example :
file.get(ch);
file.put(ch);
the function put() writes a single character to the associated stream. Similarly, the function get() reads a single character form the associated stream.
example :
file.get(ch);
file.put(ch);
write()
and read() function
write() and read() functions write and read blocks of binary data.
example:
file.read((char *)&obj, sizeof(obj));
file.write((char *)&obj, sizeof(obj));
write() and read() functions write and read blocks of binary data.
example:
file.read((char *)&obj, sizeof(obj));
file.write((char *)&obj, sizeof(obj));
ERROR HANDLING FUNCTION
FUNCTION
|
RETURN
VALUE AND MEANING
|
eof()
|
returns
true (non zero) if end of file is encountered while reading; otherwise return
false(zero)
|
fail()
|
return
true when an input or output operation has failed
|
bad()
|
returns
true if an invalid operation is attempted or any unrecoverable error has
occurred.
|
good()
|
returns
true if no error has occurred.
|
File Pointers And Their Manipulation
All i/o streams objects have, at least,
one internal stream pointer:
ifstream, like istream, has a pointer known as the get pointer that points to the element to be read in the next input operation.
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).
These internal stream pointers that point to the reading or writing locations within a stream can be manipulated using the following member functions:
These internal stream pointers that point to the reading or writing locations within a stream can be manipulated using the following member functions:
seekg()
|
moves
get pointer(input) to a specified location
|
seekp()
|
moves
put pointer (output) to a specified location
|
tellg()
|
gives
the current position of the get pointer
|
tellp()
|
gives
the current position of the put pointer
|
The other prototype for these functions is:
seekg(offset, refposition );
seekp(offset, refposition );
seekp(offset, refposition );
The parameter offset represents the
number of bytes the file pointer is to be moved from the location specified by
the parameter refposition. The refposition takes one of the following three
constants defined in the ios class.
ios::beg
start of the file
ios::cur current position of the pointer
ios::end end of the file
ios::cur current position of the pointer
ios::end end of the file
example:
file.seekg(-10, ios::cur);
file.seekg(-10, ios::cur);
Basic Operation On
Text File In C++
File I/O is a five-step process:
1. Include the header file fstream in the program.
2. Declare file stream object.
3. Open the file with the file stream object.
4. Use the file stream object with >>, <<, or other input/output functions.
5. Close the files.
1. Include the header file fstream in the program.
2. Declare file stream object.
3. Open the file with the file stream object.
4. Use the file stream object with >>, <<, or other input/output functions.
5. Close the files.
Following program shows how the steps might appear in program.
Program to write in a text file
#include <fstream>
using namespace std;
int main()
{
ofstream fout;
fout.open("out.txt");
char str[300] = "Time is a great teacher but
unfortunately it kills all its pupils. Berlioz";
//Write string to the file.
fout << str;
fout.close();
return 0;
}
Program to read from text file and
display it
#include<fstream>
#include<iostream>
using namespace std;
int main()
{
ifstream fin;
fin.open("out.txt");
char ch;
while(!fin.eof())
{
fin.get(ch);
cout << ch;
}
fin.close();
return 0;
}
Program to count number of characters.
#include<fstream>
#include<iostream>
using namespace std;
int main()
{
ifstream fin;
fin.open("out.txt");
int count = 0;
char ch;
while(!fin.eof())
{
fin.get(ch);
count++;
}
cout << "Number of characters in file are " << count;
fin.close();
return 0;
}
Program to count number of words
#include<fstream>
#include<iostream>
using namespace std;
int main()
{
ifstream fin;
fin.open("out.txt");
int count = 0;
char word[30];
while(!fin.eof())
{
fin >> word;
count++;
}
cout << "Number of words in file are " << count;
fin.close();
return 0;
}
Program to count number of lines
#include<fstream>
#include<iostream>
using namespace std;
int main()
{
ifstream fin;
fin.open("out.txt");
int count = 0;
char str[80];
while(!fin.eof())
{
fin.getline(str,80);
count++;
}
cout << "Number of lines in file are " << count;
fin.close();
return 0;
}
Program to copy contents of file to
another file.
#include<fstream>
using namespace std;
int main()
{
ifstream fin;
fin.open("out.txt");
ofstream fout;
fout.open("sample.txt");
char ch;
while(!fin.eof())
{
fin.get(ch);
fout << ch;
}
fin.close();
fout.close();
return 0;
}
Basic Operation On Binary File In C++
When data is stored in a file in the binary format, reading and writing
data is faster because no time is lost in converting the data from one format to another format. Such files are called binary files. This following program explains how to create binary files and also how to read, write, search, delete and modify data from binary files.
data is faster because no time is lost in converting the data from one format to another format. Such files are called binary files. This following program explains how to create binary files and also how to read, write, search, delete and modify data from binary files.
#include<iostream>
#include<fstream>
#include<cstdio>
using namespace std;
class Student
{
int admno;
char name[50];
public:
void setData()
{
cout << "\nEnter admission no. ";
cin >> admno;
cout << "Enter name of student ";
cin.getline(name,50);
}
void showData()
{
cout << "\nAdmission no. : " << admno;
cout << "\nStudent Name : " << name;
}
int retAdmno()
{
return admno;
}
};
/*
* function to write in a binary file.
*/
void write_record()
{
ofstream outFile;
outFile.open("student.dat", ios::binary | ios::app);
Student obj;
obj.setData();
outFile.write((char*)&obj, sizeof(obj));
outFile.close();
}
/*
* function to display records of file
*/
void display()
{
ifstream inFile;
inFile.open("student.dat", ios::binary);
Student obj;
while(inFile.read((char*)&obj, sizeof(obj)))
{
obj.showData();
}
inFile.close();
}
/*
* function to search and display from binary file
*/
void search(int n)
{
ifstream inFile;
inFile.open("student.dat", ios::binary);
Student obj;
while(inFile.read((char*)&obj, sizeof(obj)))
{
if(obj.retAdmno() == n)
{
obj.showData();
}
}
inFile.close();
}
/*
* function to delete a record
*/
void delete_record(int n)
{
Student obj;
ifstream inFile;
inFile.open("student.dat", ios::binary);
ofstream outFile;
outFile.open("temp.dat", ios::out | ios::binary);
while(inFile.read((char*)&obj, sizeof(obj)))
{
if(obj.retAdmno() != n)
{
outFile.write((char*)&obj, sizeof(obj));
}
}
inFile.close();
outFile.close();
remove("student.dat");
rename("temp.dat", "student.dat");
}
/*
* function to modify a record
*/
void modify_record(int n)
{
fstream file;
file.open("student.dat",ios::in | ios::out);
Student obj;
while(file.read((char*)&obj, sizeof(obj)))
{
if(obj.retAdmno() == n)
{
cout << "\nEnter the new details of student";
obj.setData();
int pos = -1 * sizeof(obj);
file.seekp(pos, ios::cur);
file.write((char*)&obj, sizeof(obj));
}
}
file.close();
}
int main()
{
//Store 4 records in file
for(int i = 1; i <= 4; i++)
write_record();
//Display all records
cout << "\nList of records";
display();
//Search record
cout << "\nSearch result";
search(100);
//Delete record
delete_record(100);
cout << "\nRecord Deleted";
//Modify record
cout << "\nModify Record 101 ";
modify_record(101);
return 0;
}
No comments:
Post a Comment