SlideShare a Scribd company logo
1 of 32
Download to read offline
Object Oriented Programming



          File Handling
           LECTURE-32, 33


  1
FILE HANDLING

2
Introduction
    All programs we looked earlier:
          input data from the keyboard.
          output data to the screen.

      Output would be lost as soon as we
exit from the program.
    How do we store data permanently?
          We can use secondary storage device.
          Data is packaged up on the storage device as
           data structures called files.
                                                          3
Streams Usage
 We’ve used streams already
  cin
     Input from stream object connected to
      keyboard
  cout
     Output to stream object connected to
       screen
 Can define other streams
  To or from files
                                              4
  Used similarly as cin, cout
File input and output streams




                                5
Streams
     File Input Stream – reads data from disk
      file to the program.

      File output Stream – writes data to the
disk file from the program.

     The I/O system of C++ contains:
          ifstream – provides input operations on files

          ofstream – provides output operations on files
          fstream – supports for simultaneous input and
           output operations on files                       6
Stream Classes




                 7
The Data Hierarchy
 From smallest to largest
   Bit (binary digit)
      1 or 0
      Everything in computer ultimately represented as bits
   Character set
      Digits, letters, symbols used to represent data
      Every character represented by 1's and 0's
   Byte: 8 bits
      Can store a character (char)


                                                               8
The Data Hierarchy (contd.)
 From smallest to largest (continued)
    Field: group of characters with some meaning
        e.g., Your name
     Record: group of related fields
        struct or class in C++
        In payroll system, could be name, S#, address, wage
        Each field associated with same employee
        Record key: field used to uniquely identify record
     File: group of related records
        Payroll for entire company
     Database: group of related files
        Payroll, accounts-receivable, inventory…

                                                               9
General File I/O Steps

• Declare a file name variable
• Associate the file name variable with
  the disk file name
• Open the file
• Use the file
• Close the file
                                          10
Files and Streams
 C++ views file as sequence of bytes
   Ends with end-of-file marker
       0   1   2   3   4   5   6   7   8   9   ...   n-1
                                               ...         end-of-file marker




                                                                                11
Creating a Sequential-Access File
 C++ imposes no structure on file
    Concept of "record" must be implemented by programmer
 To open file, create objects
    Creates "line of communication" from object to file
    Classes
        ifstream (input only)
        ofstream (output only)
        fstream (I/O)
     Constructors take file name and file-open mode
            ofstream outClientFile( "filename", fileOpenMode );
     To attach a file later
            ofstream outClientFile;
            outClientFile.open( "filename", fileOpenMode);

                                                                  12
Creating a Sequential-Access File
 File-open modes




                                      13
Creating a Sequential-Access File
 Operations
    Overloaded operator!
       !outClientFile
       Returns nonzero (true) if some error
           Opening non-existent file for reading, no permissions, disk full
            etc.
    Writing to file (just like cout)
       outClientFile << myVariable
    Closing file
       outClientFile.close()
       Automatically closed when destructor called
                                                                         14
// Create a sequential file.
#include <iostream>
#include <fstream>
using namespace std;


int main() {
    // ofstream constructor opens file
    ofstream outClientFile( "clients.txt",
ios::out );
    // exit program if unable to create file
    if ( !outClientFile ) { // overloaded ! operator
    cout << "File could not be opened" << endl;
    exit( 1 );
} // end if
                                                       15
cout << "Enter the account, name, and balance." << endl
     << "Enter ’N’ to end input.n? ";


   int account;
   char name[ 30 ], ch=‘y’;
   double balance;
   // read account, name and balance from cin, then place in file
   while (ch == ‘y’) {
       cin >> account >> name >> balance;
     outClientFile << account << ' ' << name << ' ' << balance
                << endl;
     cout << "? ";
          cin>>ch;


   } // end while
  return 0; // ofstream destructor closes file                      16
} // end main
Enter the account, name, and balance.
Enter ‘N’ to end input.
100 Jones 24.98
? Y
200 Doe 345.67
? Y
300 White 0.00
? Y
400 Stone -42.16
? Y
500 Rich 224.62
? N
                                        17
Reading Data from a Sequential-Access
File
 Reading files
   ifstream inClientFile( "filename", ios::in );
   Overloaded !
     !inClientFile tests if file was opened
      properly
 Upcoming example
   Credit manager program
   List accounts with zero balance, credit, and debit




                                                         18
const int ZERO = 0, CREDIT = 1, DEBIT = 2, END = 3;

int main()
{
  // ifstream constructor opens the file
  ifstream inClientFile( "clients.txt", ios::in );

  // exit program if ifstream could not open file
  if ( !inClientFile )
  {
     cout << "File could not be opened" << endl;
     exit( 1 );
  } // end if

  int request;
  int account;
  char name[ 30 ];
  double balance;

  // get user's request (e.g., zero, credit or debit balance)
                                                                19
  request = getRequest();
// process user's request
while ( request != END ) {


 switch ( request ) {


   case ZERO:
     cout << "nAccounts with zero balances:n";
     break;


   case CREDIT:
     cout << "nAccounts with credit balances:n";
     break;


   case DEBIT:
     cout << "nAccounts with debit balances:n";
     break;
                                                     20

 } // end switch
// read account, name and balance from file
 inClientFile >> account >> name >> balance;

 // display file contents (until eof)
 while ( !inClientFile.eof() ) {

   // display record
   if ( shouldDisplay( request, balance ) )
      cout << account << ‘ ’<<name << ‘ ’<< balance << endl;

   // read account, name and balance from file
   inClientFile >> account >> name >> balance;
 } // end inner while

  inClientFile.clear(); // reset eof for next input
  inClientFile.seekg( 0 ); // move to beginning of file
  request = getRequest(); // get additional request from user
} // end outer while                                            21
// getRequest function definition
  int getRequest()
       {
          int choice;

        cout<<“Enter 0 to see zero balance accounts”<<endl;
        cout<<“Enter 1 to see credit balance accounts”<<endl;
        cout<<“Enter 2 to see debit balance accounts”<<endl;
        cout<<“Enter 3 to end the program”<<endl;

        cin>>choice;
        return choice;
     }
// shouldDisplay function definition
     bool shouldDisplay(int req, double bal)
     {

       if( (req == ZERO && bal == 0) || (req == CREDIT && bal < 0) ||
     (req == DEBIT && bal > 0) )
             return true;                                               22
       else return false;
    }
Reading Data from a Sequential-Access
File
 File position pointers
    Files have "get" and "put" pointers
       Index of next byte to read/write
     Functions to reposition pointer
       seekg (seek get for istream class)
       seekp (seek put for ostream class)
     seekg and seekp take offset and direction
       Direction (ios::beg default)
              ios::beg - relative to beginning of stream
              ios::cur - relative to current position
              ios::end - relative to end
       Offset: number of bytes relative to direction       23
Reading Data from a Sequential-Access
File
 Examples
    fileObject.seekg(0)
      Goes to start of file (location 0) because ios::beg
       is default
    fileObject.seekg(n)
      Goes to nth byte from beginning
    fileObject.seekg(n, ios::cur)
      Goes n bytes forward from current position
    fileObject.seekg(y, ios::end)
      Goes y bytes back from end
    fileObject.seekg(0, ios::cur)
      Goes to last byte                                     24
    seekp similar
Reading Data from a Sequential-Access
File
 To find pointer location
   tellg and tellp
   int location = fileObject.tellg()




                                        25
Storage in Sequential-Access File
 "1234567" (char *) vs 1234567 (int)
    char * takes 7 bytes (1 for each character)
    int takes fixed number of bytes
        123 same size in bytes as 1234567
 << operator
    outFile << number
        Outputs number (int) as a char *
        Variable number of bytes




                                                   26
Updating Sequential-Access Files
 Updating sequential files
    Risk overwriting other data
    Example: change name "White" to "Worthington"
       Old data
      300 White 0.00 400 Jones 32.87
       Insert new data

         300 Worthington 0.00


        300 White 0.00 400 Jones 32.87
                                           Data gets overwritten

         300 Worthington 0.00ones 32.87



                                                                   27
Random-Access Files
 Instant access
   Want to locate record quickly
      Airline reservations, Banking system, ATMs
   Sequential files must search through each one
 Random-access files are solution
   Instant access
   Update/delete items without changing other data




                                                      28
Random-Access Files
 C++ imposes no structure on files
   Programmer must create random-access files
   Fixed-length records
      Calculate position in file from record size and key

       0           100           200           300           400           500


                                                                                  }    byte offsets
           }
                     }
                                   }
                                                 }
                                                               }
                                                                             }
           100           100           100           100           100           100
           bytes         bytes         bytes         bytes         bytes         bytes


                                                                                                      29
<< operator vs. write()
 outFile << number
   Outputs number (int) as a char *
   Variable number of bytes
 outFile.write( const char *, size );
   Outputs raw bytes
   Takes pointer to memory location, number of bytes to write
       Copies data directly from memory into file
       Does not convert to char *




                                                             30
Creating a Random-Access File
 Example
outFile.write( reinterpret_cast<const char *>(&number),
   sizeof( number ) );
    &number is an int *
       Convert to const char * with
        reinterpret_cast
    sizeof(number)
       Size of number (an int) in bytes
    read function similar (more later)
    Must use write/read when using raw, unformatted data
       Use ios::binary for raw writes/reads

                                                            31
Creating a Random-Access File
 Problem statement
    Credit processing program
    Record
      Account number (key)
      First and last name
      Balance
    Account operations
      Update, create new, delete, list all accounts in a file


Next: program to create blank 100-record file

                                                                 32

More Related Content

What's hot (20)

Files in c++ ppt
Files in c++ pptFiles in c++ ppt
Files in c++ ppt
 
Python programming : Files
Python programming : FilesPython programming : Files
Python programming : Files
 
Pointers in c++
Pointers in c++Pointers in c++
Pointers in c++
 
File handling in c
File handling in cFile handling in c
File handling in c
 
Files and streams
Files and streamsFiles and streams
Files and streams
 
RECURSION IN C
RECURSION IN C RECURSION IN C
RECURSION IN C
 
File handling in c
File handling in cFile handling in c
File handling in c
 
Class and Objects in Java
Class and Objects in JavaClass and Objects in Java
Class and Objects in Java
 
User defined functions in C
User defined functions in CUser defined functions in C
User defined functions in C
 
Functions in c++
Functions in c++Functions in c++
Functions in c++
 
String functions in C
String functions in CString functions in C
String functions in C
 
Interface in java
Interface in javaInterface in java
Interface in java
 
Java I/o streams
Java I/o streamsJava I/o streams
Java I/o streams
 
Java exception handling
Java exception handlingJava exception handling
Java exception handling
 
6. static keyword
6. static keyword6. static keyword
6. static keyword
 
Friend functions
Friend functions Friend functions
Friend functions
 
Control structures in java
Control structures in javaControl structures in java
Control structures in java
 
Functions in C
Functions in CFunctions in C
Functions in C
 
Constructors and Destructor in C++
Constructors and Destructor in C++Constructors and Destructor in C++
Constructors and Destructor in C++
 
FUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPTFUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPT
 

Similar to file handling c++

Similar to file handling c++ (20)

C++ files and streams
C++ files and streamsC++ files and streams
C++ files and streams
 
Java Input Output and File Handling
Java Input Output and File HandlingJava Input Output and File Handling
Java Input Output and File Handling
 
Filesinc 130512002619-phpapp01
Filesinc 130512002619-phpapp01Filesinc 130512002619-phpapp01
Filesinc 130512002619-phpapp01
 
Files in c++
Files in c++Files in c++
Files in c++
 
basics of file handling
basics of file handlingbasics of file handling
basics of file handling
 
Basics of file handling
Basics of file handlingBasics of file handling
Basics of file handling
 
hasbngclic687.ppt
hasbngclic687.ppthasbngclic687.ppt
hasbngclic687.ppt
 
File handling in_c
File handling in_cFile handling in_c
File handling in_c
 
17 files and streams
17 files and streams17 files and streams
17 files and streams
 
File in cpp 2016
File in cpp 2016 File in cpp 2016
File in cpp 2016
 
Stream classes in C++
Stream classes in C++Stream classes in C++
Stream classes in C++
 
Files in C++.pdf is the notes of cpp for reference
Files in C++.pdf is the notes of cpp for referenceFiles in C++.pdf is the notes of cpp for reference
Files in C++.pdf is the notes of cpp for reference
 
Pf cs102 programming-8 [file handling] (1)
Pf cs102 programming-8 [file handling] (1)Pf cs102 programming-8 [file handling] (1)
Pf cs102 programming-8 [file handling] (1)
 
Filehandlinging cp2
Filehandlinging cp2Filehandlinging cp2
Filehandlinging cp2
 
Data file handling
Data file handlingData file handling
Data file handling
 
working with files
working with filesworking with files
working with files
 
15. Streams Files and Directories
15. Streams Files and Directories 15. Streams Files and Directories
15. Streams Files and Directories
 
Input File dalam C++
Input File dalam C++Input File dalam C++
Input File dalam C++
 
7 Data File Handling
7 Data File Handling7 Data File Handling
7 Data File Handling
 
File Handling In C++
File Handling In C++File Handling In C++
File Handling In C++
 

Recently uploaded

AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdfAMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdfphamnguyenenglishnb
 
Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management SystemChristalin Nelson
 
Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management systemChristalin Nelson
 
Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)Mark Reed
 
Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...Jisc
 
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTSGRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTSJoshuaGantuangco2
 
Science 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxScience 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxMaryGraceBautista27
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designMIPLM
 
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdfInclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdfTechSoup
 
ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4MiaBumagat1
 
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfVirtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfErwinPantujan2
 
Global Lehigh Strategic Initiatives (without descriptions)
Global Lehigh Strategic Initiatives (without descriptions)Global Lehigh Strategic Initiatives (without descriptions)
Global Lehigh Strategic Initiatives (without descriptions)cama23
 
How to Add Barcode on PDF Report in Odoo 17
How to Add Barcode on PDF Report in Odoo 17How to Add Barcode on PDF Report in Odoo 17
How to Add Barcode on PDF Report in Odoo 17Celine George
 
Culture Uniformity or Diversity IN SOCIOLOGY.pptx
Culture Uniformity or Diversity IN SOCIOLOGY.pptxCulture Uniformity or Diversity IN SOCIOLOGY.pptx
Culture Uniformity or Diversity IN SOCIOLOGY.pptxPoojaSen20
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...JhezDiaz1
 
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYKayeClaireEstoconing
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPCeline George
 

Recently uploaded (20)

AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdfAMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
AMERICAN LANGUAGE HUB_Level2_Student'sBook_Answerkey.pdf
 
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptxYOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
YOUVE_GOT_EMAIL_PRELIMS_EL_DORADO_2024.pptx
 
Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management System
 
Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management system
 
Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)
 
Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...Procuring digital preservation CAN be quick and painless with our new dynamic...
Procuring digital preservation CAN be quick and painless with our new dynamic...
 
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTSGRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
GRADE 4 - SUMMATIVE TEST QUARTER 4 ALL SUBJECTS
 
LEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptx
LEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptxLEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptx
LEFT_ON_C'N_ PRELIMS_EL_DORADO_2024.pptx
 
Science 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptxScience 7 Quarter 4 Module 2: Natural Resources.pptx
Science 7 Quarter 4 Module 2: Natural Resources.pptx
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-design
 
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdfInclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
 
ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4ANG SEKTOR NG agrikultura.pptx QUARTER 4
ANG SEKTOR NG agrikultura.pptx QUARTER 4
 
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfVirtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
 
Global Lehigh Strategic Initiatives (without descriptions)
Global Lehigh Strategic Initiatives (without descriptions)Global Lehigh Strategic Initiatives (without descriptions)
Global Lehigh Strategic Initiatives (without descriptions)
 
How to Add Barcode on PDF Report in Odoo 17
How to Add Barcode on PDF Report in Odoo 17How to Add Barcode on PDF Report in Odoo 17
How to Add Barcode on PDF Report in Odoo 17
 
Culture Uniformity or Diversity IN SOCIOLOGY.pptx
Culture Uniformity or Diversity IN SOCIOLOGY.pptxCulture Uniformity or Diversity IN SOCIOLOGY.pptx
Culture Uniformity or Diversity IN SOCIOLOGY.pptx
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
 
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
 
How to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERPHow to do quick user assign in kanban in Odoo 17 ERP
How to do quick user assign in kanban in Odoo 17 ERP
 
Raw materials used in Herbal Cosmetics.pptx
Raw materials used in Herbal Cosmetics.pptxRaw materials used in Herbal Cosmetics.pptx
Raw materials used in Herbal Cosmetics.pptx
 

file handling c++

  • 1. Object Oriented Programming File Handling LECTURE-32, 33 1
  • 3. Introduction  All programs we looked earlier:  input data from the keyboard.  output data to the screen.  Output would be lost as soon as we exit from the program.  How do we store data permanently?  We can use secondary storage device.  Data is packaged up on the storage device as data structures called files. 3
  • 4. Streams Usage  We’ve used streams already cin Input from stream object connected to keyboard cout Output to stream object connected to screen  Can define other streams To or from files 4 Used similarly as cin, cout
  • 5. File input and output streams 5
  • 6. Streams  File Input Stream – reads data from disk file to the program.  File output Stream – writes data to the disk file from the program.  The I/O system of C++ contains:  ifstream – provides input operations on files  ofstream – provides output operations on files  fstream – supports for simultaneous input and output operations on files 6
  • 8. The Data Hierarchy  From smallest to largest  Bit (binary digit)  1 or 0  Everything in computer ultimately represented as bits  Character set  Digits, letters, symbols used to represent data  Every character represented by 1's and 0's  Byte: 8 bits  Can store a character (char) 8
  • 9. The Data Hierarchy (contd.)  From smallest to largest (continued)  Field: group of characters with some meaning e.g., Your name  Record: group of related fields struct or class in C++ In payroll system, could be name, S#, address, wage Each field associated with same employee Record key: field used to uniquely identify record  File: group of related records Payroll for entire company  Database: group of related files Payroll, accounts-receivable, inventory… 9
  • 10. General File I/O Steps • Declare a file name variable • Associate the file name variable with the disk file name • Open the file • Use the file • Close the file 10
  • 11. Files and Streams  C++ views file as sequence of bytes  Ends with end-of-file marker 0 1 2 3 4 5 6 7 8 9 ... n-1 ... end-of-file marker 11
  • 12. Creating a Sequential-Access File  C++ imposes no structure on file  Concept of "record" must be implemented by programmer  To open file, create objects  Creates "line of communication" from object to file  Classes ifstream (input only) ofstream (output only) fstream (I/O)  Constructors take file name and file-open mode ofstream outClientFile( "filename", fileOpenMode );  To attach a file later ofstream outClientFile; outClientFile.open( "filename", fileOpenMode); 12
  • 13. Creating a Sequential-Access File  File-open modes 13
  • 14. Creating a Sequential-Access File  Operations  Overloaded operator! !outClientFile Returns nonzero (true) if some error Opening non-existent file for reading, no permissions, disk full etc.  Writing to file (just like cout) outClientFile << myVariable  Closing file outClientFile.close() Automatically closed when destructor called 14
  • 15. // Create a sequential file. #include <iostream> #include <fstream> using namespace std; int main() { // ofstream constructor opens file ofstream outClientFile( "clients.txt", ios::out ); // exit program if unable to create file if ( !outClientFile ) { // overloaded ! operator cout << "File could not be opened" << endl; exit( 1 ); } // end if 15
  • 16. cout << "Enter the account, name, and balance." << endl << "Enter ’N’ to end input.n? "; int account; char name[ 30 ], ch=‘y’; double balance; // read account, name and balance from cin, then place in file while (ch == ‘y’) { cin >> account >> name >> balance; outClientFile << account << ' ' << name << ' ' << balance << endl; cout << "? "; cin>>ch; } // end while return 0; // ofstream destructor closes file 16 } // end main
  • 17. Enter the account, name, and balance. Enter ‘N’ to end input. 100 Jones 24.98 ? Y 200 Doe 345.67 ? Y 300 White 0.00 ? Y 400 Stone -42.16 ? Y 500 Rich 224.62 ? N 17
  • 18. Reading Data from a Sequential-Access File  Reading files  ifstream inClientFile( "filename", ios::in );  Overloaded !  !inClientFile tests if file was opened properly  Upcoming example  Credit manager program  List accounts with zero balance, credit, and debit 18
  • 19. const int ZERO = 0, CREDIT = 1, DEBIT = 2, END = 3; int main() { // ifstream constructor opens the file ifstream inClientFile( "clients.txt", ios::in ); // exit program if ifstream could not open file if ( !inClientFile ) { cout << "File could not be opened" << endl; exit( 1 ); } // end if int request; int account; char name[ 30 ]; double balance; // get user's request (e.g., zero, credit or debit balance) 19 request = getRequest();
  • 20. // process user's request while ( request != END ) { switch ( request ) { case ZERO: cout << "nAccounts with zero balances:n"; break; case CREDIT: cout << "nAccounts with credit balances:n"; break; case DEBIT: cout << "nAccounts with debit balances:n"; break; 20 } // end switch
  • 21. // read account, name and balance from file inClientFile >> account >> name >> balance; // display file contents (until eof) while ( !inClientFile.eof() ) { // display record if ( shouldDisplay( request, balance ) ) cout << account << ‘ ’<<name << ‘ ’<< balance << endl; // read account, name and balance from file inClientFile >> account >> name >> balance; } // end inner while inClientFile.clear(); // reset eof for next input inClientFile.seekg( 0 ); // move to beginning of file request = getRequest(); // get additional request from user } // end outer while 21
  • 22. // getRequest function definition int getRequest() { int choice; cout<<“Enter 0 to see zero balance accounts”<<endl; cout<<“Enter 1 to see credit balance accounts”<<endl; cout<<“Enter 2 to see debit balance accounts”<<endl; cout<<“Enter 3 to end the program”<<endl; cin>>choice; return choice; } // shouldDisplay function definition bool shouldDisplay(int req, double bal) { if( (req == ZERO && bal == 0) || (req == CREDIT && bal < 0) || (req == DEBIT && bal > 0) ) return true; 22 else return false; }
  • 23. Reading Data from a Sequential-Access File  File position pointers  Files have "get" and "put" pointers  Index of next byte to read/write  Functions to reposition pointer  seekg (seek get for istream class)  seekp (seek put for ostream class)  seekg and seekp take offset and direction  Direction (ios::beg default)  ios::beg - relative to beginning of stream  ios::cur - relative to current position  ios::end - relative to end  Offset: number of bytes relative to direction 23
  • 24. Reading Data from a Sequential-Access File  Examples  fileObject.seekg(0) Goes to start of file (location 0) because ios::beg is default  fileObject.seekg(n) Goes to nth byte from beginning  fileObject.seekg(n, ios::cur) Goes n bytes forward from current position  fileObject.seekg(y, ios::end) Goes y bytes back from end  fileObject.seekg(0, ios::cur) Goes to last byte 24  seekp similar
  • 25. Reading Data from a Sequential-Access File  To find pointer location  tellg and tellp  int location = fileObject.tellg() 25
  • 26. Storage in Sequential-Access File  "1234567" (char *) vs 1234567 (int)  char * takes 7 bytes (1 for each character)  int takes fixed number of bytes 123 same size in bytes as 1234567  << operator  outFile << number Outputs number (int) as a char * Variable number of bytes 26
  • 27. Updating Sequential-Access Files  Updating sequential files  Risk overwriting other data  Example: change name "White" to "Worthington" Old data 300 White 0.00 400 Jones 32.87 Insert new data 300 Worthington 0.00 300 White 0.00 400 Jones 32.87 Data gets overwritten 300 Worthington 0.00ones 32.87 27
  • 28. Random-Access Files  Instant access  Want to locate record quickly  Airline reservations, Banking system, ATMs  Sequential files must search through each one  Random-access files are solution  Instant access  Update/delete items without changing other data 28
  • 29. Random-Access Files  C++ imposes no structure on files  Programmer must create random-access files  Fixed-length records  Calculate position in file from record size and key 0 100 200 300 400 500 } byte offsets } } } } } } 100 100 100 100 100 100 bytes bytes bytes bytes bytes bytes 29
  • 30. << operator vs. write()  outFile << number Outputs number (int) as a char * Variable number of bytes  outFile.write( const char *, size ); Outputs raw bytes Takes pointer to memory location, number of bytes to write  Copies data directly from memory into file  Does not convert to char * 30
  • 31. Creating a Random-Access File  Example outFile.write( reinterpret_cast<const char *>(&number), sizeof( number ) );  &number is an int * Convert to const char * with reinterpret_cast  sizeof(number) Size of number (an int) in bytes  read function similar (more later)  Must use write/read when using raw, unformatted data Use ios::binary for raw writes/reads 31
  • 32. Creating a Random-Access File  Problem statement  Credit processing program  Record Account number (key) First and last name Balance  Account operations Update, create new, delete, list all accounts in a file Next: program to create blank 100-record file 32