Title: Objectives
1Chapter 15
2Objectives
- 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
3I/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
4I/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
5I/O File Stream Objects and Methods (continued)
6I/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
7I/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.txt
- exper1.dat scores.dat math.mem
8File 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
9File 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
10File Stream Objects (continued)
11File Stream Objects (continued)
- Distinct file stream object must be created for
each file used, regardless of files 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
12File 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
13File 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
14File Stream Methods (continued)
- open() method
- Establishes physical connecting link between
program and file - Operating system function that is transparent to
programmer - Connects files 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
15File 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()
16File 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 files status - Program 15.1 illustrates statements required to
open file for input including error checking
routine to ensure that successful open was
obtained
17File 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 ltlt "\nThe file was not successfully
opened" - ltlt "\n Please check that the file currently
exists." - ltlt endl
- exit(1)
-
18File Stream Methods (continued)
19File Stream Methods (continued)
20File Stream Methods (continued)
21File 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
22Embedded 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
23Embedded and Interactive File Names (continued)
24Embedded and Interactive File Names (continued)
25Closing a File
- close() method Breaks connection between files
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 streams connection to its current
file - close() method takes no argument
26Reading 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 ltlt descrip ltlt ' ' ltlt price
- The file name directs output stream to file
instead of standard display device - Example Program 15.4
27Reading 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.95
- Bulbs 3.22
- Fuses 1.08
- Actual storage of characters in file depends on
character codes used by computer - Output file file contains 36 characters (Figure
15.2)
28Reading and Writing Character-Based Files
(continued)
29Reading 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 gtgt descrip gtgt 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
30Reading 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
31Reading from a Text File (continued)
32Standard 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
33Other 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
34Exceptions 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
35Opening 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
36Opening Multiple Files (continued)
37Random 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
38Random 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
39Random File Access (continued)
40File Streams as Function Arguments
- A file stream object can be used as function
argument - Functions 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
41Common Programming Errors
- Using files 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
42Common 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
43Summary
- 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
fstreams open() method - This function connects files 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
44Summary (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
45Summary (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