38
A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

Embed Size (px)

Citation preview

Page 1: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

A FIRST BOOK OF C++

CHAPTER 9

I/O STREAMS AND DATA FILES

Page 2: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

OBJECTIVES

In this chapter, you will learn about:

• I/O File Stream Objects and Methods• Reading and Writing Text Files• Random File Access• File Streams as Function Arguments• Common Programming Errors• The iostream Class Library

A First Book of C++ 4th Edition 2

Page 3: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

I/O FILE STREAM OBJECTS AND METHODS

To store and retrieve data outside a C++ program, you need two things:

• A file• A file stream object

A First Book of C++ 4th Edition 3

Page 4: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILESFile: collection of data stored together under common name, usually on disk, USB drive, or CD/DVD

• C++ programs stored on disk are examples of files• Stored data in program file is the code that becomes input

data to C++ compiler A C++ program is not usually considered data file

Data file typically refers only to files containing the data used in C++ program

A First Book of C++ 4th Edition 4

Page 5: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILES

External name: unique filename for file

• External name is how operating system knows file• Contents of directory or folder are listed by external names

Each computer operating system has its own specifications for external filename size

• Table 9.1 lists specifications for more commonly used operating systems

A First Book of C++ 4th Edition 5

Page 6: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILES

A First Book of C++ 4th Edition 6

Page 7: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILES

Use descriptive names

Avoid long filenames

• They take more time to type and can result in typing errors• Manageable length for filename is 12 to 14 characters, with

maximum of 25 characters

Choose filenames that indicate type of data in file and application for which it is used

• Frequently, first eight characters describe data, and an extension describes application

A First Book of C++ 4th Edition 7

Page 8: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILES

Using DOS convention, the following are all valid computer data filenames:

prices.dat records info.txt exper1.dat scores.dat

math.mem

A First Book of C++ 4th Edition 8

Page 9: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILES

Two basic types of files: both store data using binary code

• Text (character-based) files: store each character using individual character code (typically ASCII or Unicode)

• Advantage: allows files to be displayed by word-processing program or text editor

• Binary-based files: store numbers in binary form and strings in ASCII or Unicode form

• Advantage: provides compactness

A First Book of C++ 4th Edition 9

Page 10: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILE STREAM OBJECTS

File stream: one-way transmission path used to connect a file to a program

Mode (of file stream): determines whether path will move data from file into program or from program to file

Input file stream: used to transfer data from a file to a program

Output file stream: sends data from a program to a file

A First Book of C++ 4th Edition 10

Page 11: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILE STREAM OBJECTS

Direction (mode) of file stream is defined in relation to program and not file:

• Data that goes into program is considered input data • Data sent out from program is considered output data

Figure 9.1 illustrates data flow from and to file using input and output file streams

A First Book of C++ 4th Edition 11

Page 12: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILE STREAM OBJECTS

A First Book of C++ 4th Edition 12

Page 13: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILE STREAM OBJECTS

Distinct file stream object must be created for each file used, regardless of file’s type

For program to both read and write to file, both an input and output file stream object are required

• Input file stream objects are declared to be of type ifstream• Output file streams are declared to be of type ofstream

A First Book of C++ 4th Edition 13

Page 14: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILE STREAM METHODSEach file stream object has access to methods defined for its respective ifstream or ofstream class, including:

• Opening file: connecting stream object name to external filename • Determining whether a successful connection has been made • Closing file: closing connection • Getting next data item into program from input stream• Putting new data item from program onto output stream• Detecting when end of file has been reached

A First Book of C++ 4th Edition 14

Page 15: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILE STREAM METHODS

open() method:

• Establishes physical connecting link between program and file

• Operating system function that is transparent to programmer

• Connects file’s external computer name to stream object name used internally by program

• Provided by the ifstream and ofstream classes

File opened for input is said to be in read mode

A First Book of C++ 4th Edition 15

Page 16: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILE STREAM METHODS

Example: inFile.open("prices.dat");

• Connects external text file named prices.dat to internal program file stream object named inFile

• Accesses file using internal object name inFile• Computer saves file under the external name prices.dat

Calling the open() method uses the standard object notation: objectName.open()

A First Book of C++ 4th Edition 16

Page 17: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILE STREAM METHODSfail() method: returns true value if file is unsuccessfully opened, false if open succeeded

• Good programming practice is to check that connection is established before using file

In addition to fail() method, C++ provides three other methods, listed in Table 9.2, that can be used to detect file’s status

Program 9.1 illustrates statements required to open file for input, including error-checking routine to ensure that successful open was obtained

A First Book of C++ 4th Edition 17

Page 18: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILE STREAM METHODS

Example of use of fail() method:

ifstream inFile; // any object name can be used here

inFile.open("prices.dat"); // open the file

// check that the connection was opened successfully

if (inFile.fail())

{

cout << "\nThe file was not successfully opened"

<< "\n Please check that the file currently exists." << endl;

exit(1); }

A First Book of C++ 4th Edition 18

Page 19: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

A First Book of C++ 4th Edition 19

Page 20: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILE STREAM METHODS

A First Book of C++ 4th Edition 20

Page 21: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILE STREAM METHODS

Different checking required for output files

• If file exists having same name as file to be opened in output mode, existing file is erased and all data lost

To avoid this situation, file is first opened in input mode to see if it exists

• If it does, user is given choice of explicitly permitting it to be overwritten (when it is later opened in output mode)

Code used to accomplish this is highlighted in Program 9.2

A First Book of C++ 4th Edition 21

Page 22: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILE STREAM METHODS

Embedding a filename in program causes problems

• No provision for user to enter desired filename during program execution

• Any changes require modification of open() method and recompile

These problems can be solved by assigning filename to string variable, as shown in Programs 9.3a and 9.3b

A First Book of C++ 4th Edition 22

Page 23: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

A First Book of C++ 4th Edition 23

Page 24: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILE STREAM METHODSclose() method: breaks connection between file’s external name and file stream object

• Object can then be used for another file• Good programming practice is to close files no longer needed • Operating system automatically closes any open files at end

of normal program executionExample: inFile.close(); closes inFile stream’s connection to its current file

• close() method takes no argument

A First Book of C++ 4th Edition 24

Page 25: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

READING AND WRITING TEXT FILES

Operations similar to reading input from keyboard and writing data to display screen

• For writing to file, the cout object is replaced by ofstream object name declared in program

Example: if outFile is declared as object of type ofstream, the following output statement is valid:

outFile << descrip << ' ' << price;

• The filename directs output stream to file instead of standard display device

• Example: Program 9.4

A First Book of C++ 4th Edition 25

Page 26: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

READING AND WRITING TEXT FILES

Program 9.4 output:

• File named prices.dat is created and saved by computer as text file (the default file type)

• prices.dat is sequential file consisting of the following data:

Mats 39.95Bulbs 3.22Fuses 1.08

• Actual storage of characters in file depends on character codes used by computer

• Output file contains 36 characters (Figure 9.2)

A First Book of C++ 4th Edition 26

Page 27: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

READING AND WRITING TEXT FILES

A First Book of C++ 4th Edition 27

Page 28: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

READING FROM A TEXT FILE

Almost identical to reading data from standard keyboard

• cin object replaced by ifstream object declared in program

Example: the input statement:

inFile >> descrip >> price;

reads next two items in file and stores them in variables descrip and price

• File stream name directs input to come from file stream rather than the keyboard

A First Book of C++ 4th Edition 28

Page 29: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

READING FROM A TEXT FILE

Program 9.5 illustrates how the prices.dat file created in Program 9.4 can be read

• Also illustrates method of detecting end-of-file (EOF) marker using good() function (see Table 9.2)

Other methods that can be used for stream input are listed in Table 9.3

• Each method must be preceded by stream object name

A First Book of C++ 4th Edition 29

Page 30: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

READING FROM A TEXT FILE

A First Book of C++ 4th Edition 30

Page 31: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

STANDARD DEVICE FILES

C++ supports logical and physical file objects

• Logical file object: stream that connects file of logically related data (data file) to a program

• Physical file object: stream that connects to hardware device such as keyboard or printer

Standard input file: physical device assigned to program for data entry

Standard output file: physical device on which output is automatically displayed

A First Book of C++ 4th Edition 31

Page 32: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

OTHER DEVICES

The keyboard, display, error, and log streams are automatically connected to the stream objects named cin, cout, cerr, clog

• Requires iostream header file

Other devices can be used if the name assigned by system is known

• Example: most personal computers assign name prn to printer connected to computer

• Statement outFile.open("prn") connects printer to ofstream object named outFile

A First Book of C++ 4th Edition 32

Page 33: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

RANDOM FILE ACCESS

File access: retrieving data from file

File organization: the way data is stored in a file

Sequential organization: characters in file are stored in sequential manner, one after another

Random access: any character in an open file can be read directly without having to read characters ahead of it

A First Book of C++ 4th Edition 33

Page 34: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

FILE STREAMS AS FUNCTION ARGUMENTS

A file stream object can be used as function argument

• Function’s formal parameter must be a reference (see Section 6.3) to correct stream, either as ifstream& or ofstream&

Example: Program 9.8

• ofstream object named outfile is opened in main()• Stream object is passed to the function inOut()• inOut() is used to write five lines of user-entered text to file

A First Book of C++ 4th Edition 34

Page 35: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

COMMON PROGRAMMING ERRORS

Forgetting to open a file before attempting to read from it or write to it

Using file’s external name in place of internal file stream object name when accessing file

Opening file for output without first checking that file with given name already exists

• Not checking for preexisting file ensures that file will be overwritten

Not understanding that end of a file is detected only after EOF sentinel has either been read or passed over

A First Book of C++ 4th Edition 35

Page 36: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

COMMON PROGRAMMING ERRORS

Attempting to detect end of file using character variables for EOF marker

• Any variable used to accept EOF must be declared as an integer variable

A First Book of C++ 4th Edition 36

Page 37: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

SUMMARY

A data file is any collection of data stored in an external storage medium under a common name

A data file is connected to file stream using fstream’s open() method

• This function connects file’s external name with internal object name

A file can be opened in input or output mode

• An opened output file stream either creates a new data file or erases data in an existing opened file

A First Book of C++ 4th Edition 37

Page 38: A FIRST BOOK OF C++ CHAPTER 9 I/O STREAMS AND DATA FILES

SUMMARY

All file streams must be declared as objects of either the ifstream or ofstream classes

In addition to any files opened within a function, the standard stream objects cin, cout, and cerr are automatically declared and opened when a program is run

A First Book of C++ 4th Edition 38