0% found this document useful (0 votes)
6 views48 pages

Advanced File Operations Guide

The document provides an overview of advanced file operations in programming, detailing how to read from and write to files using various file stream objects like ifstream, ofstream, and fstream. It covers file access modes, error handling, and techniques for formatting file output, as well as working with binary files and structures. Additionally, it explains random access file operations, enabling direct access to specific data entries within files.

Uploaded by

hiho19824
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views48 pages

Advanced File Operations Guide

The document provides an overview of advanced file operations in programming, detailing how to read from and write to files using various file stream objects like ifstream, ofstream, and fstream. It covers file access modes, error handling, and techniques for formatting file output, as well as working with binary files and structures. Additionally, it explains random access file operations, enabling direct access to specific data entries within files.

Uploaded by

hiho19824
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

C07

Advanced File
Operations

1
11.1
File Operations

2
File Operations
• File: a set of data stored on a computer,
often on a disk drive
• Programs can read from, write to files
• Used in many applications:
– Word processing
– Databases
– Spreadsheets
– Compilers

3
Using Files
1. Requires fstream header file
– use ifstream data type for input files
– use ofstream data type for output files
– use fstream data type for both input, output
files
2. Can use >>, << to read from, write to a file
3. Can use eof member function to test for
end of input file

4
fstream Object

• fstream object can be used for either input or output


• Must specify mode on the open statement
• Sample modes:
ios::in – input
ios::out – output
• Can be combined on open call:
[Link]("[Link]", ios::in | ios::out);

5
File Access Flags

6
Using Files - Example
// copy 10 numbers between files
// open the files
fstream infile("[Link]", ios::in);
fstream outfile("[Link]", ios::out);
int num;
for (int i = 1; i <= 10; i++)
{
infile >> num; // use the files
outfile << num;
}
[Link](); // close the files
[Link]();
7
Default File Open Modes
• ifstream:
– open for input only
– file cannot be written to
– open fails if file does not exist

• ofstream:
– open for output only
– file cannot be read from
– file created if no file exists
– file contents erased if file exists

8
More File Open Details
• Can use filename, flags in definition:
ifstream gradeList("[Link]");

• File stream object set to 0 (false) if


open failed:
if (!gradeList) ...

• Can also check fail member function to


detect file open error:
if ([Link]()) ...
9
11.2
File Output Formatting

10
File Output Formatting

• Use the same techniques with file stream


objects as with cout: showpoint,
setw(x), showprecision(x), etc.

• Requires iomanip to use manipulators

11
12
Program 12-3 (Continued)

13
11.3
Passing File Stream Objects to
Functions

14
Passing File Stream Objects to
Functions
• It is very useful to pass file stream objects
to functions

• Be sure to always pass file stream objects


by reference

15
16
17
18
11.4
More Detailed Error Testing

19
More Detailed Error Testing

• Can examine error state bits to determine stream


status
• Bits tested/cleared by stream member functions
ios::eofbit set when end of file detected
ios::failbit set when operation failed
ios::hardfail set when error occurred and no recovery
ios::badbit set when invalid operation attempted
ios::goodbit set when no other bits are set

12-20
Member Functions / Flags

eof() true if eofbit set, false otherwise

fail() true if failbit or hardfail set, false otherwise

bad() true if badbit set, false otherwise

good() true if goodbit set, false otherwise

clear() clear all flags (no arguments), or clear a specific flag

12-21
From Program 12-6

22
11.5
Member Functions for Reading
and Writing Files

23
Member Functions for Reading
and Writing Files
• Functions that may be used for input with
whitespace, to perform single character
I/O, or to return to the beginning of an input
file
• Member functions:
getline: reads input including whitespace
get: reads a single character
put: writes a single character

24
The getline Function
• Three arguments:
– Name of a file stream object
– Name of a string object
– Delimiter character of your choice
– Examples, using the file stream object myFile,
and the string objects name and address:
getline(myFile, name);
getline(myFile, address, '\t');

– If left out, '\n' is default for third argument

25
26
27
Single Character I/O
• get: read a single character from a file
char letterGrade;
[Link](letterGrade);
Will read any character, including whitespace

• put: write a single character to a file


[Link](letterGrade);

28
11.6
Working with Multiple Files

29
Working with Multiple Files
• Can have more than file open at a time in
a program

• Files may be open for input or output

• Need to define file stream object for each


file

30
31
32
33
11.7
Binary Files

34
Binary Files

• Binary file contains unformatted, non-ASCII


data
• Indicate by using binary flag on open:
[Link]("[Link]", ios::in |
ios::binary);

12-35
Binary Files
• Use read and write instead of <<, >>
char ch;
// read in a letter from file
[Link](&ch, sizeof(ch));

address of where to put


the data being read in. how many bytes to
The read function expects
read from the file
to read chars

// send a character to a file


[Link](&ch, sizeof(ch));

12-36
Binary Files
• To read, write non-character data, must use a
typecast operator to treat the address of the data
as a character address
int num;
// read in a binary number from a file
[Link](reinterpret_cast<char *>&num,
treat the address of num as sizeof(num));
the address of a char

// send a binary value to a file


[Link](reinterpret_cast<char *>&num,
sizeof(num));
37
11.8
Creating Records with Structures

38
Creating Records with
Structures
• Can write structures to, read structures
from files

• To work with structures and files,


– use ios::binary file flag upon open
– use read, write member functions

12-39
Creating Records with
Structures
struct TestScore
{
int studentId;
double score;
char grade;
};
TestScore oneTest;
...
// write out oneTest to a file
[Link](reinterpret_cast<char *>
(&oneTest), sizeof(oneTest));
12-40
11.9
Random-Access Files

41
Random-Access Files

• Sequential access: start at beginning of


file and go through data in file, in order,
to end
– to access 100th entry in file, go through 99
preceding entries first
• Random access: access data in a file in
any order
– can access 100th entry directly

12-42
Random Access Member
Functions
• seekg (seek get): used with files open for
input

• seekp (seek put): used with files open for


output

• Used to go to a specific position in a file

12-43
Random Access Member
Functions
• seekg,seekp arguments:
offset: number of bytes, as a long
mode flag: starting point to compute offset

• Examples:
[Link](25L, ios::beg);
// set read position at 26th byte
// from beginning of file
[Link](-10L, ios::cur);
// set write position 10 bytes
// before current position

12-44
Important Note on Random
Access
• If eof is true, it must be cleared before
seekg or seekp:

[Link]();
[Link](0L, ios::beg);
// go to the beginning of the file

12-45
Random Access Information
• tellg member function: return current
byte position in input file
long int whereAmI;
whereAmI = [Link]();

• tellp member function: return current


byte position in output file
whereAmI = [Link]();

12-46
11.10
Opening a File for
Both Input and Output

47
Opening a File for
Both Input and Output
• File can be open for input and output simultaneously
• Supports updating a file:
– read data from file into memory
– update data
– write data back to file
• Use fstream for file object definition:
fstream gradeList("[Link]",
ios::in | ios::out);
• Can also use ios::binary flag for binary data

48

You might also like