chapter 15

45
Chapter 15

Upload: sierra-king

Post on 15-Mar-2016

40 views

Category:

Documents


0 download

DESCRIPTION

Chapter 15. Objectives. You should be able to describe: I/O File Stream Objects and Methods Reading and Writing Character-Based Files Exceptions and File Checking Random File Access File Streams as Function Arguments Common Programming Errors. I/O File Stream Objects and Methods. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Chapter 15

Chapter 15

Page 2: Chapter 15

2

ObjectivesYou should be able to describe:• I/O File Stream Objects and Methods• Reading and Writing Character-Based Files• Exceptions and File Checking• Random File Access• File Streams as Function Arguments• Common Programming Errors

Page 3: Chapter 15

3

I/O File Stream Objects and Methods• File: Collection of data that is stored

together under common name, usually on disk, magnetic tape, or CD– C++ programs stored on disk are examples of

files– The stored data in program file is program code

that becomes input data to C++ compiler • A C++ program is not usually considered

data, and term file, or data file, is typically used to refer only to external files that contain the data used in C++ program

Page 4: Chapter 15

4

I/O File Stream Objects and Methods (continued)

• External name: Unique file name for file– External name is how operating system knows file– Contents of directory or folder are listed by

external names• Format of external names: Each computer

operating system has its own specifications for external file size– Table 15.1 lists specifications for more commonly

used operating systems

Page 5: Chapter 15

5

I/O File Stream Objects and Methods (continued)

Page 6: Chapter 15

6

I/O File Stream Objects and Methods (continued)

• File naming conventions:– Use descriptive names– Avoid long file names

• They take more time to type and can result in typing errors

• Manageable length for file name is 12 to 14 characters, with maximum of 25 characters

– Choose file names 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

Page 7: Chapter 15

7

I/O File Stream Objects and Methods (continued)

• More file naming conventions– Using DOS convention, the following are all

valid computer data file names:prices.dat records info.txtexper1.dat scores.dat math.mem

Page 8: Chapter 15

8

File Stream Objects• File stream: One-way transmission path that is

used to connect file stored on physical device, such as disk or CD, to program

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

• Input file stream: Receives or reads data from file into program

• Output file stream: Sends or writes data to file

Page 9: Chapter 15

9

File Stream Objects (continued)

• Direction (mode) of file stream is defined in relation to program and not file:– Data that goes into program are considered

input data – Data sent out from program are considered

output data • Figure 15.1 illustrates data flow from and

to file using input and output streams

Page 10: Chapter 15

10

File Stream Objects (continued)

Page 11: Chapter 15

11

File Stream Objects (continued)

• 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

Page 12: Chapter 15

12

File Stream Objects (continued)

• 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

Page 13: Chapter 15

13

File Stream Methods• Each file stream object has access to methods

defined for its respective ifstream or ofstream class, including:– Opening file: connecting stream object name to

external file name – 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

Page 14: Chapter 15

14

File Stream Methods (continued)

• 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• Before a file can be opened, it must be declared as either ifstream or ofstream object

• File opened for input is said to be in read mode

Page 15: Chapter 15

15

File Stream Methods (continued)

• 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()

Page 16: Chapter 15

16

File Stream Methods (continued)

• fail() 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 15.2, that can be used to detect file’s status

• Program 15.1 illustrates statements required to open file for input including error checking routine to ensure that successful open was obtained

Page 17: Chapter 15

17

File Stream Methods (continued)

• 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 successfully // opened if (inFile.fail()) { cout << "\nThe file was not successfully opened"

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

exit(1); }

Page 18: Chapter 15

18

File Stream Methods (continued)

Page 19: Chapter 15

19

File Stream Methods (continued)

Page 20: Chapter 15

20

File Stream Methods (continued)

Page 21: Chapter 15

21

File Stream Methods (continued)

• 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 15.2

Page 22: Chapter 15

22

Embedded and Interactive File Names

• Embedding a file name in program causes problems– No provision for user to enter desired file name

during program execution– Any changes require modification of open()

method and recompile• These problems can be solved by assigning

file name to string variable as shown in Programs 15.3a and 15.3b– String variable: Variable that can hold string value

Page 23: Chapter 15

23

Embedded and Interactive File Names (continued)

Page 24: Chapter 15

24

Embedded and Interactive File Names (continued)

Page 25: Chapter 15

25

Closing a File• close() 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 execution• Example: The statement inFile.close(); closes inFile stream’s connection to its current file– close() method takes no argument

Page 26: Chapter 15

26

Reading and Writing Character-Based 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 file name directs output stream to file instead

of standard display device– Example: Program 15.4

Page 27: Chapter 15

27

Reading and Writing Character-Based Files

(continued)• Program 15.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 file contains 36 characters (Figure 15.2)

Page 28: Chapter 15

28

Reading and Writing Character-Based Files

(continued)

Page 29: Chapter 15

29

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 standard input device stream

Page 30: Chapter 15

30

Reading from a Text File (continued)

• Program 15.5 illustrates how the prices.dat file created in Program 15.4 can be read – Also illustrates method of detecting end-of-file

(EOF) marker using good() function (see Table 15.2)

• Other methods that can be used for stream input are listed in Table 15.3– Each method must be preceded by stream object

name

Page 31: Chapter 15

31

Reading from a Text File (continued)

Page 32: Chapter 15

32

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

Page 33: Chapter 15

33

Other Devices• The keyboard, display, error reporting, and

logging 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

Page 34: Chapter 15

34

Exceptions and File Checking• Error detection and exception handling are used

in C++ programs that access one or more files• General exception handling code (section 7.3)

try{// one or more statements, at least one // of which should throw an exception

}catch(exceptionDataType parameterName){// one or more statements

}• Program 15.7 illustrates file opening exception

handling

Page 35: Chapter 15

35

Opening Multiple Files• Example: Read the data from character-

based file named info.txt, one character at a time, and write this data to file named backup.txt– Essentially, this is a file-copy program

• Figure 15.4 illustrates structure of streams needed to produce file copy

• Program 15.9 creates backup.txt file as an exact duplicate of info.txt file using procedure described in Figure 15.4

Page 36: Chapter 15

36

Opening Multiple Files (continued)

Page 37: Chapter 15

37

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

Page 38: Chapter 15

38

Random File Access (continued)

• File position marker: Long integer that represents an offset from the beginning of each file– Keeps track of where next character is to be read from or written

to– Allows for random access of any individual character

• Table 15.4 shows functions used to access and change the file position marker

• Program 15.10 illustrates use of seek() and tell() to read and display file in reverse order

Page 39: Chapter 15

39

Random File Access (continued)

Page 40: Chapter 15

40

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 appropriate stream, either as ifstream& or ofstream&

• Example: Program 15.11 – 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

Page 41: Chapter 15

41

Common Programming Errors• 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

Page 42: Chapter 15

42

Common Programming Errors (continued)

• 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• Using integer argument with the seekg() and seekp() functions– Offset must be a long integer constant or variable – Any other value passed to these functions can

result in unpredictable result

Page 43: Chapter 15

43

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

Page 44: Chapter 15

44

Summary (continued)• 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

Page 45: Chapter 15

45

Summary (continued)• Data files can be accessed randomly using

the seekg(), seekp(), tellg(), and tellp() methods– The g versions of these functions are used to alter

and query file position marker for input file streams

– The p versions do the same for output file streams• Table 15.5 lists the methods supplied by the fstream class for file manipulation