Chapter 8 File-Oriented Input and Output
8.1 INTRODUCTION a file can also be designed to store data. We can easily update files, A data file as input Using a test editor to create data files
8.2 FUNDAMENTALS OF C DATA FILES a data file is a named collection of records, normally kept in external storage. A record is the collection of related data values in a file. A text file stores data as readable A binary file consists of nonreadable characters All records in a test file are terminated by an end- of-file marker placed by the operating system to mark the physical end of the file.
C Files and Streams The most commonly used functions are 1. The function fopen to open files, that is, to establish a stream between a program and a file 2. The functions fscanf, fgetc, fgets, and fread for input of data from files 3. The functions fprintf, fputc, fputs, and fwrite for output of data to a file 4. The function feof to check for the end-of-file marker during input The function fclose to close a file, or detach it from the program
Fscanf(student_file, “&d”, &test_score); The prefix f reminder that they all operate on files.
Declaring Files FILE *personnel_file; Declares personnel_file as a file establishes a stream between your program and the file personnel_file * declared as a pointer that is a variable contains the address of another variable or program entity in the main memory The keyword FILE in a file declaration must be all uppercase.
Naming Data Files Internal file name is the name that the C system uses to identify a file among others that a program might process. External file name is the name that the operating system uses to identify a file in a disk directory For example: A:\PROSONNEL.TXT
Before we can process a file, we must properly associate the external and internal names for a file so that whenever our C program references the file, the operating system can understand which external file it should access for input or output purposes.
InternalFileName= fopen(ExternalFileName, OpenMode); Used file open modes are 1.“r”, can read data from it 2.“w”, to write data to it 3.“a”, append data to the end of an already existing file 4.“r+”, opens a file for update(both an input and an output file) 5.“w+”, destroys the file if it already exists and opens a new file for update
Open mode is important 1. The OpenMode parameter in the fopen statement is required 2. “w” and “w+” are destructive; will destroy that file and begin creating a new file 3. “a” and “a+” are nondestructive. Can read data from a file that has been opened in “a+” 4. Open mode of input “r” the file must exist physically
Example 8.2 FILE *outdata; Outdata=fopen(“a:OUTPUT.TXT”, “w”); Establish outdata as an output stream between our program and the external file A:OUTPUT.TXT Example 8.3 Char in_file_name[15];
Example 8.3 char in_file_name[15]; … FILE *indata; … printf(“Enter external file name for input file: “); gets(in_file_name); … indata=fopen(in_file_name, “r”);
File Open Verification If an fopen function call returns a NULL pointer valus, then the call has failed. NULL is a pointer variables. Exit(-1); Will terminate the program execution and return the control to the operating system with a value of –1 Abnormal program termination
Example 8.4 #include … if((indata=fopen(file_name, “r”)) ==Null) { printf(“File open error on %s”, file_name); exit(-1); }
fprintf(stderr, “File open error on %s”, file_name); printing to stderr is faster than printing to stdout because the message appears on the screen without any delay or intermediate character buffering.
Closing Files and the fclose Function Fclose(InternalFileName); Cuts the connection between the program and the file. The file pointer no longer exists Fclose(indata); Checking for End-of-File and the feof Function To detect the end-of-file marker at the end of a data file
The feof function returns a nonzero integer(true) if the most recent input operation on the file InternalFileName has detected the thd-of-file marker; For example, While (! feof(student file)).