starting out with c++: early objects 5/e © 2006 pearson education. all rights reserved starting out...

59
Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced File and I/O Operations

Upload: bernadette-webster

Post on 19-Dec-2015

221 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved

Starting Out with C++: Early Objects 5th Edition

Chapter 13

Advanced File and I/O Operations

Page 2: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 2

© 2006 Pearson Education. All Rights Reserved

Topics

13.1 Files

13.2 Output Formatting

13.3 Passing File Stream Objects to Functions

13.4 More Detailed Error Testing

13.5 Member Functions for Reading and Writing Files

Page 3: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 3

© 2006 Pearson Education. All Rights Reserved

Topics (continued)

13.6 Working with Multiple Files

13.7 Binary Files

13.8 Creating Records with Structures

13.9 Random-Access Files

13.10 Opening a File for Both Input and

Output

Page 4: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 4

© 2006 Pearson Education. All Rights Reserved

13.1 Files

• 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

Page 5: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 5

© 2006 Pearson Education. All Rights Reserved

File Naming Conventions

• Different systems may have different requirements on how to name a file:– MS-DOS: up to 8 characters, a dot, up to a 3

character extension. No spaces. Example:

sales.dat

• Extension often indicates purpose of file:– .doc: Microsoft Word file– .cpp: C++ source file– .h: C++ header file

Page 6: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 6

© 2006 Pearson Education. All Rights Reserved

Steps to Using a File

1. Open the file

2. Use (read from, write to) the file

3. Close the file

Page 7: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 7

© 2006 Pearson Education. All Rights Reserved

File Stream Objects

• Use of files requires file stream objects

• There are three types of file stream objects

(1) ifstream objects: used for input

(2) ofstream objects: used for output

(3) fstream objects: used for both input and output

Page 8: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 8

© 2006 Pearson Education. All Rights Reserved

File Names

• File name can be a full pathname to file:c:\data\student.dat

tells compiler exactly where to look • File name can also be simple name:

student.dat

this must be in the same directory as the program executable, or in the compiler's default directory

Page 9: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 9

© 2006 Pearson Education. All Rights Reserved

Opening a File

• A file is known to the system by its name

• To use a file, a program needs to connect a suitable stream object to the file. This is known as opening the file

• Opening a file is achieved through the open member function of a file stream object

Page 10: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 10

© 2006 Pearson Education. All Rights Reserved

Opening a File for Input

• Create an ifstream object in your program

ifstream inFile;• Open the file by passing its name to the

stream’s open member function

inFile.open("myfile.dat");

Page 11: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 11

© 2006 Pearson Education. All Rights Reserved

Getting File Names from Users

• Define file stream object, variable to hold file nameifstream inFile;char FileName(81);

• Prompt user to enter filename and read the filename

cout << "Enter filename: ";cin.getline(FileName, 81);

• Open the fileinFile.open(FileName);

Page 12: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 12

© 2006 Pearson Education. All Rights Reserved

Opening a File for Output

• Create an ofstream object in your program

ofstream outFile;• Open the file by passing its name to the

stream’s open member function

outFile.open("myfile.dat");

Page 13: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 13

© 2006 Pearson Education. All Rights Reserved

The fstream Object• fstream object can be used for either input or

output

fstream file;• To use fstream for input, specify ios::in as

the second argument to open file.open("myfile.dat",ios::in);• To use fstream for output, specify ios::out

as the second argument to open file.open("myfile.dat",ios::out);

Page 14: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 14

© 2006 Pearson Education. All Rights Reserved

Opening a File for Input and Output

• fstream object can be used for both input and output at the same time

• Create the fstream object and specify both ios::in and ios::out as the second argument to the open member function

fstream file;

file.open("myfile.dat",

ios::in|ios::out);

Page 15: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 15

© 2006 Pearson Education. All Rights Reserved

Opening Files with Constructors

• Stream constructors have overloaded versions that take the same parameters as open

• These constructors open the file, eliminating the need for a separate call to open

fstream inFile("myfile.dat", ios::in);

Page 16: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 16

© 2006 Pearson Education. All Rights Reserved

File Open Modes

• File open modes specify how a file is opened and what can be done with the file once it is open

• ios::in and ios::out are examples of file open modes, also called file mode flags

• File modes can be combined and passed as second argument of open member function

Page 17: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 17

© 2006 Pearson Education. All Rights Reserved

File Mode Flags

ios::app create new file, or append to end of existing file

ios::ate go to end of existing file; write anywhere

ios::binary read/write in binary mode (not text mode)

ios::in open for input

ios::out open for output

Page 18: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 18

© 2006 Pearson Education. All Rights Reserved

File Open Modes

• Not all combinations of file open modes make sense

• ifstream and ofstream have default file open modes defined for them, hence the second parameter to their open member function is optional

Page 19: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 19

© 2006 Pearson Education. All Rights Reserved

Default File Open Modes• ofstream:

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

• ifstream: – open for input only– file cannot be written to– open fails if file does not exist

Page 20: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 20

© 2006 Pearson Education. All Rights Reserved

Detecting File Open Errors

• Two methods for detecting if a file open failed

(1) Call fail() on the stream

inFile.open("myfile");

if (inFile.fail())

{ cout << "Can't open file";

exit(1);

}

Page 21: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 21

© 2006 Pearson Education. All Rights Reserved

Detecting File Open Errors

(2) Test the status of the stream using the ! operator inFile.open("myfile"); if (!inFile) { cout << "Can't open file"; exit(1); }

Page 22: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 22

© 2006 Pearson Education. All Rights Reserved

Using fail() to detect eof• Example of reading all integers in a file //attempt a read int x; infile >> x; while (!infile.fail()) { //success, so not eof cout << x; //read again infile >> x; }

Page 23: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 23

© 2006 Pearson Education. All Rights Reserved

Using >> to detect eof• To detect end of file, fail() must be

called immediately after the call to >>• The extraction operator returns the

same value that will be returned by the next call to fail:

- (infile >> x) is nonzero if >> succeeds

- (infile >> x) is zero if >> fails

Page 24: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 24

© 2006 Pearson Education. All Rights Reserved

Detecting End of File• Reading all integers in a file int x; while (infile >> x) { // read was successful cout >> x; // go to top of loop and // attempt another read }

Page 25: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 25

© 2006 Pearson Education. All Rights Reserved

13.2 Output Formatting

• Can format with I/O manipulators: they work with file objects just like they work with cout

• Can format with formatting member functions

• The ostringstream class allows in-memory formatting into a string object

before writing to a file

Page 26: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 26

© 2006 Pearson Education. All Rights Reserved

I/O Manipulators

left, right left or right justify output

oct, dec, hex

display output in octal, decimal, or hexadecimal

endl, flush write newline (endl only) and flush output

showpos, noshowpos

do, do not show leading + with non-negative numbers

showpoint, noshowpoint

do, do not show decimal point and trailing zeroes

Page 27: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 27

© 2006 Pearson Education. All Rights Reserved

More I/O Manipulators

fixed, scientific

use fixed or scientific notation for floating-point numbers

setw(n) sets minimum field output width to n

setprecision(n) sets floating-point precision to n

setfill(ch) uses ch as fill character

Page 28: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 28

© 2006 Pearson Education. All Rights Reserved

Formatting with Member Functions

• Can also use stream object member functions to format output:gradeFile.width(3); // like

// setw(3)• Names of member functions may differ

from manipulators.

Page 29: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 29

© 2006 Pearson Education. All Rights Reserved

Formatting with Member Functions

Member Function Manipulator or Meaningwidth(n) setw(n)precision(n) setprecision(n)setf() set format flagsunsetf() disable format flags

Page 30: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 30

© 2006 Pearson Education. All Rights Reserved

sstream Formatting

1) To format output into an in-memory string object, include the sstream header file and create an ostringstream object

#include <sstream> ostringstream outStr;

Page 31: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 31

© 2006 Pearson Education. All Rights Reserved

sstream Formatting

2) Write to the ostringstream object using I/O manipulators, all other stream member functions:

outStr << showpoint << fixed << setprecision(2) << 'S'<< amount;

Page 32: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 32

© 2006 Pearson Education. All Rights Reserved

sstream Formatting

3) Access the C-string inside the ostringstream object by calling its str member function

cout << outStr.str();

Page 33: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 33

© 2006 Pearson Education. All Rights Reserved

13.3 Passing File Stream Objects to Functions

• File stream objects keep track of current read or write position in the file

• Always use pass a file object as parameter to a function using pass by reference

Page 34: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 34

© 2006 Pearson Education. All Rights Reserved

Passing File Stream Objects to Functions

//print all integers in a file to screen

void printFile(ifstream &in)

{ int x;

while(in >> x)

{ out << x << " "; }

}

Page 35: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 35

© 2006 Pearson Education. All Rights Reserved

13.4 More Detailed Error Testing

• Streams have error bits (flags) that are set by every operation to indicate success or failure of the operation, and the status of the stream

• Stream member functions report on the settings of the flags

Page 36: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 36

© 2006 Pearson Education. All Rights Reserved

Error State Bits• Can examine error state bits to determine file

stream status

ios::eofbit set when end of file detected

ios::failbit set when operation failed

ios::hardfail set when an irrecoverable error occurred

ios::badbit set when invalid operation attempted

ios::goodbit set when no other bits are set

Page 37: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 37

© 2006 Pearson Education. All Rights Reserved

Error Bit Reporting Functions

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

Page 38: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 38

© 2006 Pearson Education. All Rights Reserved

13.5 Member Functions for Reading and Writing Files

• Unlike the extraction operator >>, these reading functions do not skip whitespace: getline: read a line of input

get: reads a single character

seekg: goes to beginning of input file

Page 39: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 39

© 2006 Pearson Education. All Rights Reserved

getline Member Function

• getline(char s[ ], int max, char stop ='\n')

– char s[ ]: Character array to hold input– int max : Maximum number of characters

to read– char stop: Terminator to stop at if

encountered before max number of characters is read . Default is '\n'

Page 40: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 40

© 2006 Pearson Education. All Rights Reserved

Single Character Input

• get(char &ch)

Read a single character from the input stream. Does not skip whitespace.

ifstream inFile; char ch;

inFile.open("myFile");

inFile.get(ch);

cout << "Got " << ch;

Page 41: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 41

© 2006 Pearson Education. All Rights Reserved

Single Character Output

• put(char ch)

Output a character to a file

• Example

ofstream outFile;

outFile.open("myfile");

outFile.put('G');

Page 42: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 42

© 2006 Pearson Education. All Rights Reserved

Single Character I/O

• To copy an input file to an output file char ch; infile.get(ch); while (!infile.fail()) { outfile.put(ch); infile.get(ch); } infile.close(); outfile.close();

Page 43: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 43

© 2006 Pearson Education. All Rights Reserved

Moving About in Input Files• seekg(offset, place) Move to a given offset relative to a given place in the file

– offset: number of bytes from place, specified as a long

– place: location in file from which to compute offset•ios::beg: beginning of file•ios::end: end of the file•ios::cur: current position in file

Page 44: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 44

© 2006 Pearson Education. All Rights Reserved

Rewinding a File

• To move to beginning of file, seek to an offset of zero from beginning of fileinFile.seekg(0L, ios::beg);

• Error or eof bits will block seeking to the beginning of file. Clear bits first:

inFile.clear();

inFile.seekg(0L, ios::beg);

Page 45: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 45

© 2006 Pearson Education. All Rights Reserved

13.6 Working with Multiple Files

• Can have more than one file open at a time in a program

• Files may be open for input or output

• Need to define stream object for each file

Page 46: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 46

© 2006 Pearson Education. All Rights Reserved

13.7 Binary Files

• Binary files store data in the same format that a computer has in main memory

• Text files store data in which numeric values have been converted into strings of ASCII characters

• Files are opened in text mode (as text files) by default

Page 47: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 47

© 2006 Pearson Education. All Rights Reserved

Using Binary Files

• Pass the ios::binary flag to the open member function to open a file in binary mode

infile.open("myfile.dat",ios::binary);

• Reading and writing of binary files requires special read and write member functions

read(char *buffer, int numberBytes) write(char *buffer, int numberBytes)

Page 48: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 48

© 2006 Pearson Education. All Rights Reserved

Using read and write

read(char *buffer, int numberBytes)write(char *buffer, int numberBytes)

• buffer: holds an array of bytes to transfer between memory and the file

• numberBytes: the number of bytes to transfer

Address of the buffer needs to be cast to char * using reinterpret_cast

Page 49: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 49

© 2006 Pearson Education. All Rights Reserved

Using write

• To write an array of 2 doubles to a binary file

ofstream outFile("myfile", ios:binary); double d[2] = {12.3, 34.5}; outFile.write( reinterpret_cast<char *>(d), sizeof(d) );

Page 50: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 50

© 2006 Pearson Education. All Rights Reserved

Using read• To read two 2 doubles from a binary file into an

array

ifstream inFile("myfile", ios:binary); const int DSIZE = 10; double data[DSIZE]; inFile.read( reinterpret_cast<char *>(data), 2*sizeof(double) ); // only data[0] and data[1] contain // values

Page 51: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 51

© 2006 Pearson Education. All Rights Reserved

13.8 Creating Records with Structures

• Can write structures to, read structures from files

• To work with structures and files, – use binary file flag upon open– use read, write member functions

Page 52: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 52

© 2006 Pearson Education. All Rights Reserved

Creating Records with Structures

struct TestScore{ int studentId;float score;char grade;

};TestScore test1[20];...// write out test1 array to a filegradeFile.write( reinterpret_cast<char*>(test1), sizeof(test1));

Page 53: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 53

© 2006 Pearson Education. All Rights Reserved

13.9 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

Page 54: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 54

© 2006 Pearson Education. All Rights Reserved

Random Access Member Functions

•seekg (seek get): used with input files

•seekp (seek put): used with output files

• Both are used to go to a specific position in a file

Page 55: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 55

© 2006 Pearson Education. All Rights Reserved

Random Access Member Functions

• seekg(offset,place)• seekp(offset,place)offset:long integer specifying number of bytes to moveplace: starting point for the move, specified by ios:beg, ios::cur or ios:end

Page 56: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 56

© 2006 Pearson Education. All Rights Reserved

Random-Access Member Functions

• Examples:// Set read position 25 bytes // after beginning of fileinData.seekg(25L, ios::beg);

// Set write position 10 bytes// before current positionoutData.seekp(-10L, ios::cur);

Page 57: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 57

© 2006 Pearson Education. All Rights Reserved

Random Access Information

• tellg member function: return current byte position in input fileint whereAmI;

whereAmI = inFile.tellg();

• tellp member function: return current byte position in output filewhereAmI = outFile.tellp();

Page 58: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Chapter 13 Starting Out with C++: Early Objects 5/eslide 58

© 2006 Pearson Education. All Rights Reserved

13.10 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("grades.dat",

ios::in | ios::out);

Page 59: Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 13 Advanced

Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved

Starting Out with C++: Early Objects 5th Edition

Chapter 13Advanced File and I/O

Operations