Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Binary File handling - insert, delete,modify

5,061 views

Published on

binary operation on files-inserting,deleting,modifying data in file.

Published in: Education
  • Be the first to comment

Binary File handling - insert, delete,modify

  1. 1. Starting Out with C++, 3rd Edition 1 Chapter 12 – File Operations
  2. 2. Starting Out with C++, 3rd Edition 2 12.1 What is a File? • A file is a collection on information, usually stored on a computer’s disk. Information can be saved to files and then later reused.
  3. 3. Starting Out with C++, 3rd Edition 3 12.2 File Names • All files are assigned a name that is used for identification purposes by the operating system and the user.
  4. 4. Starting Out with C++, 3rd Edition 4 Table 12-1 File Name and Extension File Contents M Y P R O G .B A S BASIC program M E N U .B A T DOS Batch File I N S T A L L .D O C Documentation File C R U N C H .E X E Executable File B O B .H T M L HTML (Hypertext Markup Language) File 3 D M O D E L .J A V A Java program or applet I N V E N T .O B J Object File P R O G 1 .P R J Borland C++ Project File A N S I .S Y S System Device Driver R E A D M E .T X T Text File
  5. 5. Starting Out with C++, 3rd Edition 5 12.3 Focus on Software Engineering: The Process of Using a File • Using a file in a program is a simple three- step process – The file must be opened. If the file does not yet exits, opening it means creating it. – Information is then saved to the file, read from the file, or both. – When the program is finished using the file, the file must be closed.
  6. 6. Starting Out with C++, 3rd Edition 6 Figure 12-1
  7. 7. Starting Out with C++, 3rd Edition 7 Figure 12-2
  8. 8. Starting Out with C++, 3rd Edition 8 12.4 Setting Up a Program for File Input/Output • Before file I/O can be performed, a C++ program must be set up properly. • File access requires the inclusion of fstream.h
  9. 9. Starting Out with C++, 3rd Edition 9 12.5 Opening a File • Before data can be written to or read from a file, the file must be opened. ifstream inputFile; inputFile.open(“customer.dat”);
  10. 10. Starting Out with C++, 3rd Edition 10 Program 12-1 // This program demonstrates the declaration of an fstream // object and the opening of a file. #include <iostream.h> #include <fstream.h> void main(void) { fstream dataFile; // Declare file stream object char fileName[81]; cout << "Enter the name of a file you wish to openn"; cout << "or create: "; cin.getline(fileName, 81); dataFile.open(fileName, ios::out); cout << "The file " << fileName << " was opened.n"; }
  11. 11. Starting Out with C++, 3rd Edition 11 Program Output with Example Input Enter the name of a file you wish to open or create: mystuff.dat [Enter] The file mystuff.dat was opened.
  12. 12. Starting Out with C++, 3rd Edition 12 Table 12-3 File Type Default Open Mode o f s tr e a m The file is opened for output only. (Information may be written to the file, but not read from the file.) If the file does not exist, it is created. If the file already exists, its contents are deleted (the file is truncated). if s tr e a m The file is opened for input only. (Information may be read from the file, but not written to it.) The file’s contents will be read from its beginning. If the file does not exist, the open function fails.
  13. 13. Starting Out with C++, 3rd Edition 13 Table 12-4 File Mode Flag Meaning io s ::a p p Append mode. If the file already exists, its contents are preserved and all output is written to the end of the file. By default, this flag causes the file to be created if it does not exist. io s ::a te If the file already exists, the program goes directly to the end of it. Output may be written anywhere in the file. io s ::b in a r y Binary mode. When a file is opened in binary mode, information is written to or read from it in pure binary format. (The default mode is text.) io s ::in Input mode. Information will be read from the file. If the file does not exist, it will not be created and the open function will fail.
  14. 14. Starting Out with C++, 3rd Edition 14 Table 12-4 continued File Mode Flag Meaning io s ::n o c r e a te If the file does not already exist, this flag will cause the open function to fail. (The file will not be created.) io s ::n o r e p la c e If the file already exists, this flag will cause the open function to fail. (The existing file will not be opened.) io s ::o u t Output mode. Information will be written to the file. By default, the file’s contents will be deleted if it already exists. io s ::tr u n c If the file already exists, its contents will be deleted (truncated). This is the default mode used by io s ::o u t.
  15. 15. Starting Out with C++, 3rd Edition 15 Opening a File at Declaration fstream dataFile(“names.dat”, ios::in | ios::out);
  16. 16. Starting Out with C++, 3rd Edition 16 Program 12-2 // This program demonstrates the opening of a file at the // time the file stream object is declared. #include <iostream.h> #include <fstream.h> void main(void) { fstream dataFile("names.dat", ios::in | ios::out); cout << "The file names.dat was opened.n"; }
  17. 17. Starting Out with C++, 3rd Edition 17 Program Output with Example Input The file names.dat was opened.
  18. 18. Starting Out with C++, 3rd Edition 18 Testing for Open Errors dataFile.open(“cust.dat”, ios::in); if (!dataFile) { cout << “Error opening file.n”; }
  19. 19. Starting Out with C++, 3rd Edition 19 Another way to Test for Open Errors dataFile.open(“cust.dat”, ios::in); if (dataFile.fail()) { cout << “Error opening file.n”; }
  20. 20. Starting Out with C++, 3rd Edition 20 12.6 Closing a File • A file should be closed when a program is finished using it.
  21. 21. Starting Out with C++, 3rd Edition 21 Program 12-3 // This program demonstrates the close function. #include <iostream.h> #include <fstream.h> void main(void) { fstream dataFile; dataFile.open("testfile.txt", ios::out); if (!dataFile) { cout << "File open error!" << endl; return; } cout << "File was created successfully.n"; cout << "Now closing the file.n"; dataFile.close(); }
  22. 22. Starting Out with C++, 3rd Edition 22 Program Output File was created successfully. Now closing the file.
  23. 23. Starting Out with C++, 3rd Edition 23 12.7 Using << to Write Information to a File • The stream insertion operator (<<) may be used to write information to a file. outputFile << “I love C++ programming !”
  24. 24. Starting Out with C++, 3rd Edition 24 Program 12-4 // This program uses the << operator to write information to a file. #include <iostream.h> #include <fstream.h> void main(void) { fstream dataFile; char line[81]; dataFile.open("demofile.txt", ios::out); if (!dataFile) { cout << "File open error!" << endl; return; }
  25. 25. Starting Out with C++, 3rd Edition 25 Program continues cout << "File opened successfully.n"; cout << "Now writing information to the file.n"; dataFile << "Jonesn"; dataFile << "Smithn"; dataFile << "Willisn"; dataFile << "Davisn"; dataFile.close(); cout << "Done.n"; }
  26. 26. Starting Out with C++, 3rd Edition 26 Program Screen Output File opened successfully. Now writing information to the file. Done. Output to File demofile.txt Jones Smith Willis Davis
  27. 27. Starting Out with C++, 3rd Edition 27 Figure 12-3
  28. 28. Starting Out with C++, 3rd Edition 28 Program 12-5 // This program writes information to a file, closes the file, // then reopens it and appends more information. #include <iostream.h> #include <fstream.h> void main(void) { fstream dataFile; dataFile.open("demofile.txt", ios::out); dataFile << "Jonesn"; dataFile << "Smithn"; dataFile.close(); dataFile.open("demofile.txt", ios::app); dataFile << "Willisn"; dataFile << "Davisn"; dataFile.close(); }
  29. 29. Starting Out with C++, 3rd Edition 29 Output to File demofile.txt Jones Smith Willis Davis
  30. 30. Starting Out with C++, 3rd Edition 30 12.8 File Output Formatting • File output may be formatted the same way as screen output.
  31. 31. Starting Out with C++, 3rd Edition 31 Program 12-6 // This program uses the precision member function of a // file stream object to format file output. #include <iostream.h> #include <fstream.h> void main(void) { fstream dataFile; float num = 123.456; dataFile.open("numfile.txt", ios::out); if (!dataFile) { cout << "File open error!" << endl; return; }
  32. 32. Starting Out with C++, 3rd Edition 32 Program continues dataFile << num << endl; dataFile.precision(5); dataFile << num << endl; dataFile.precision(4); dataFile << num << endl; dataFile.precision(3); dataFile << num << endl; }
  33. 33. Starting Out with C++, 3rd Edition 33 Contents of File numfile.txt 123.456 123.46 123.5 124
  34. 34. Starting Out with C++, 3rd Edition 34 Program 12-7 #include <iostream.h> #include <fstream.h> #include <iomanip.h> void main(void) { fstream outFile("table.txt", ios::out); int nums[3][3] = { 2897, 5, 837, 34, 7, 1623, 390, 3456, 12 }; // Write the three rows of numbers for (int row = 0; row < 3; row++) { for (int col = 0; col < 3; col++) { outFile << setw(4) << nums[row][col] << " "; } outFile << endl; } outFile.close(); }
  35. 35. Starting Out with C++, 3rd Edition 35 Contents of File TABLE.TXT 2897 5 837 34 7 1623 390 3456 12
  36. 36. Starting Out with C++, 3rd Edition 36 Figure 12-6
  37. 37. Starting Out with C++, 3rd Edition 37 12.9 Using >> to Read Information from a File • The stream extraction operator (>>) may be used to read information from a file.
  38. 38. Starting Out with C++, 3rd Edition 38 Program 12-8 // This program uses the >> operator to read information from a file. #include <iostream.h> #include <fstream.h> void main(void) { fstream dataFile; char name[81]; dataFile.open("demofile.txt", ios::in); if (!dataFile) { cout << "File open error!" << endl; return; } cout << "File opened successfully.n"; cout << "Now reading information from the file.nn";
  39. 39. Starting Out with C++, 3rd Edition 39 Program continues for (int count = 0; count < 4; count++) { dataFile >> name; cout << name << endl; } dataFile.close(); cout << "nDone.n"; }
  40. 40. Starting Out with C++, 3rd Edition 40 Program Screen Output File opened successfully. Now reading information from the file. Jones Smith Willis Davis Done.
  41. 41. Starting Out with C++, 3rd Edition 41 12.10 Detecting the End of a File • The eof() member function reports when the end of a file has been encountered. if (inFile.eof()) inFile.close();
  42. 42. Starting Out with C++, 3rd Edition 42 Program 12-9 // This program uses the file stream object's eof() member // function to detect the end of the file. #include <iostream.h> #include <fstream.h> void main(void) { fstream dataFile; char name[81]; dataFile.open("demofile.txt", ios::in); if (!dataFile) { cout << "File open error!" << endl; return; } cout << "File opened successfully.n"; cout << "Now reading information from the file.nn";
  43. 43. Starting Out with C++, 3rd Edition 43 Program continues dataFile >> name; // Read first name from the file while (!dataFile.eof()) { cout << name << endl; dataFile >> name; } dataFile.close(); cout << "nDone.n"; }
  44. 44. Starting Out with C++, 3rd Edition 44 Program Screen Output File opened successfully. Now reading information from the file. Jones Smith Willis Davis Done.
  45. 45. Starting Out with C++, 3rd Edition 45 Note on eof() • In C++, “end of file” doesn’t mean the program is at the last piece of information in the file, but beyond it. The eof() function returns true when there is no more information to be read.
  46. 46. Starting Out with C++, 3rd Edition 46 12.11 Passing File Stream Objects to Functions • File stream objects may be passed by reference to functions. bool openFileIn(fstream &file, char name[51]) { bool status; file.open(name, ios::in); if (file.fail()) status = false; else status = true; return status; }
  47. 47. Starting Out with C++, 3rd Edition 47 12.12 More Detailed Error Testing • All stream objects have error state bits that indicate the condition of the stream.
  48. 48. Starting Out with C++, 3rd Edition 48 Table 12-5 Bit Description io s ::e o f b it Set when the end of an input stream is encountered. io s ::f a ilb it Set when an attempted operation has failed. io s ::h a r d f a il Set when an unrecoverable error has occurred. io s ::b a d b it Set when an invalid operation has been attempted. io s ::g o o d b it Set when all the flags above are not set. Indicates the stream is in good condition.
  49. 49. Starting Out with C++, 3rd Edition 49 Table 12-6 Function Description e o f ( ) Returns true (non-zero) if the eofbit flag is set, otherwise returns false. f a il( ) Returns true (non-zero) if the failbit or hardfail flags are set, otherwise returns false. b a d ( ) Returns true (non-zero) if the badbit flag is set, otherwise returns false. g o o d ( ) Returns true (non-zero) if the goodbit flag is set, otherwise returns false. c le a r ( ) When called with no arguments, clears all the flags listed above. Can also be called with a specific flag as an argument.
  50. 50. Starting Out with C++, 3rd Edition 50 Program 12-11 // This program demonstrates the return value of the stream // object error testing member functions. #include <iostream.h> #include <fstream.h> // Function prototype void showState(fstream &); void main(void) { fstream testFile("stuff.dat", ios::out); if (testFile.fail()) { cout << "cannot open the file.n"; return; }
  51. 51. Starting Out with C++, 3rd Edition 51 Program continues int num = 10; cout << "Writing to the file.n"; testFile << num; // Write the integer to testFile showState(testFile); testFile.close(); // Close the file testFile.open("stuff.dat", ios::in); // Open for input if (testFile.fail()) { cout << "cannot open the file.n"; return; }
  52. 52. Starting Out with C++, 3rd Edition 52 Program continues cout << "Reading from the file.n"; testFile >> num; // Read the only number in the file showState(testFile); cout << "Forcing a bad read operation.n"; testFile >> num; // Force an invalid read operation showState(testFile); testFile.close(); // Close the file } // Definition of function ShowState. This function uses // an fstream reference as its parameter. The return values of // the eof(), fail(), bad(), and good() member functions are // displayed. The clear() function is called before the function // returns.
  53. 53. Starting Out with C++, 3rd Edition 53 Program continues void showState(fstream &file) { cout << "File Status:n"; cout << " eof bit: " << file.eof() << endl; cout << " fail bit: " << file.fail() << endl; cout << " bad bit: " << file.bad() << endl; cout << " good bit: " << file.good() << endl; file.clear(); // Clear any bad bits }
  54. 54. Starting Out with C++, 3rd Edition 54 Program Output Writing to the file. File Status: eof bit: 0 fail bit: 0 bad bit: 0 good bit: 1 Reading from the file. File Status: eof bit: 0 fail bit: 0 bad bit: 0 good bit: 1 Forcing a bad read operation. File Status: eof bit: 1 fail bit: 2 bad bit: 0 good bit: 0
  55. 55. Starting Out with C++, 3rd Edition 55 12.13 Member Functions for Reading and Writing Files • File stream objects have member functions for more specialized file reading and writing.
  56. 56. Starting Out with C++, 3rd Edition 56 Figure 12-8
  57. 57. Starting Out with C++, 3rd Edition 57 Program 12-12 // This program uses the file stream object's eof() member // function to detect the end of the file. #include <iostream.h> #include <fstream.h> void main(void) { fstream nameFile; char input[81]; nameFile.open("murphy.txt", ios::in); if (!nameFile) { cout << "File open error!" << endl; return; }
  58. 58. Starting Out with C++, 3rd Edition 58 Program 12-12 (continued) nameFile >> input; while (!nameFile.eof()) { cout << input; nameFile >> input; } nameFile.close(); }
  59. 59. Starting Out with C++, 3rd Edition 59 Program Screen Output JayneMurphy47JonesCircleAlmond,NC28702
  60. 60. Starting Out with C++, 3rd Edition 60 The getline Member Function • dataFile.getline(str, 81, ‘n’); str – This is the name of a character array, or a pointer to a section of memory. The information read from the file will be stored here. 81 – This number is one greater than the maximum number of characters to be read. In this example, a maximum of 80 characters will be read. ‘n’ – This is a delimiter character of your choice. If this delimiter is encountered, it will cause the function to stop reading before it has read the maximum number of characters. (This argument is optional. If it’s left our, ‘n’ is the default.)
  61. 61. Starting Out with C++, 3rd Edition 61 Program 12-13 // This program uses the file stream object's getline member // function to read a line of information from the file. #include <iostream.h> #include <fstream.h> void main(void) { fstream nameFile; char input[81]; nameFile.open("murphy.txt", ios::in); if (!nameFile)//if name file not present on disk { cout << "File open error!" << endl; return; }
  62. 62. Starting Out with C++, 3rd Edition 62 Program continues nameFile.getline(input, 81); // use n as a delimiter while (!nameFile.eof()) { cout << input << endl; nameFile.getline(input, 81); // use n as a delimiter } nameFile.close(); }
  63. 63. Starting Out with C++, 3rd Edition 63 Program Screen Output Jayne Murphy 47 Jones Circle Almond, NC 28702
  64. 64. Starting Out with C++, 3rd Edition 64 Program 12-14 // This file shows the getline function with a user- // specified delimiter. #include <iostream.h> #include <fstream.h> void main(void) { fstream dataFile("names2.txt", ios::in); char input[81]; dataFile.getline(input, 81, '$'); while (!dataFile.eof())//whether data file end not come { cout << input << endl; dataFile.getline(input, 81, '$'); } dataFile.close(); }
  65. 65. Starting Out with C++, 3rd Edition 65 Program Output Jayne Murphy 47 Jones Circle Almond, NC 28702 Bobbie Smith 217 Halifax Drive Canton, NC 28716 Bill Hammet PO Box 121 Springfield, NC 28357
  66. 66. Starting Out with C++, 3rd Edition 66 The get Member Function inFile.get(ch);
  67. 67. Starting Out with C++, 3rd Edition 67 Program 12-15 // This program asks the user for a file name. The file is // opened and its contents are displayed on the screen. #include <iostream.h> #include <fstream.h> void main(void) { fstream file; char ch, fileName[51]; cout << "Enter a file name: "; cin >> fileName; file.open(fileName, ios::in); if (!file) { cout << fileName << “ could not be opened.n"; return; }
  68. 68. Starting Out with C++, 3rd Edition 68 Program continues file.get(ch); // Get a character while (!file.eof()) { cout << ch; file.get(ch); // Get another character } file.close(); }
  69. 69. Starting Out with C++, 3rd Edition 69 The put Member Function • outFile.put(ch);
  70. 70. Starting Out with C++, 3rd Edition 70 Program 12-16 // This program demonstrates the put member function. #include <iostream.h> #include <fstream.h> void main(void) { fstream dataFile("sentence.txt", ios::out); char ch; cout << "Type a sentence and be sure to end it with a "; cout << "period.n"; while (1) { cin.get(ch); dataFile.put(ch); if (ch == '.') break; } dataFile.close(); }
  71. 71. Starting Out with C++, 3rd Edition 71 Program Screen Output with Example Input Type a sentence and be sure to end it with a period. I am on my way to becoming a great programmer. [Enter] Resulting Contents of the File SENTENCE.TXT: I am on my way to becoming a great programmer.
  72. 72. Starting Out with C++, 3rd Edition 72 12.14 Focus on Software Engineering: Working with Multiple Files • It’s possible to have more than one file open at once in a program.
  73. 73. Starting Out with C++, 3rd Edition 73 Program 12-17 // This program demonstrates reading from one file and writing // to a second file. #include <iostream.h> #include <fstream.h> #include <ctype.h> // Needed for the toupper function void main(void) { ifstream inFile; ofstream outFile("out.txt"); char fileName[81], ch, ch2; cout << "Enter a file name: "; cin >> fileName; inFile.open(fileName); if (!inFile) { cout << "Cannot open " << fileName << endl; return; }
  74. 74. Starting Out with C++, 3rd Edition 74 Program continues inFile.get(ch); // Get a characer from file 1 while (!inFile.eof()) // Test for end of file { ch2 = toupper(ch); // Convert to uppercase outFile.put(ch2); // Write to file2 inFile.get(ch); // Get another character from file 1 } inFile.close(); outFile.close(); cout << "File conversion done.n"; }
  75. 75. Starting Out with C++, 3rd Edition 75 Program Screen Output with Example Input Enter a file name: hownow.txt [Enter] File conversion done. Contents of hownow.txt: how now brown cow. How Now? Resulting Contents of out.txt: HOW NOW BROWN COW. HOW NOW?
  76. 76. Starting Out with C++, 3rd Edition 76 12.15 Binary Files • Binary files contain data that is unformatted, and not necessarily stored as ASCII text. file.open(“stuff.dat”, ios::out | ios::binary);
  77. 77. Starting Out with C++, 3rd Edition 77 Figure 12-9
  78. 78. Starting Out with C++, 3rd Edition 78 Figure 12-10
  79. 79. Starting Out with C++, 3rd Edition 79 Program 12-18 // This program uses the write and read functions. #include <iostream.h> #include <fstream.h> void main(void) { fstream file(“NUMS.DAT", ios::out | ios::binary); int buffer[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; cout << "Now writing the data to the file.n"; file.write((char*)buffer, sizeof(buffer)); file.close(); file.open("NUMS.DAT", ios::in); // Reopen the file. cout << "Now reading the data back into memory.n"; file.read((char*)buffer, sizeof(buffer)); for (int count = 0; count < 10; count++) cout << buffer[count] << " "; file.close(); }
  80. 80. Starting Out with C++, 3rd Edition 80 Program Screen Output Now writing the data to the file. Now reading the data back into memory. 1 2 3 4 5 6 7 8 9 10
  81. 81. Starting Out with C++, 3rd Edition 81 12.16 Creating Records with Structures • Structures may be used to store fixed-length records to a file. struct Info { char name[51]; int age; char address1[51]; char address2[51]; char phone[14]; }; • Since structures can contain a mixture of data types, you should always use the ios::binary mode when opening a file to store them.
  82. 82. Starting Out with C++, 3rd Edition 82 Program 12-19 // This program demonstrates the use of a structure variable to // store a record of information to a file. #include <iostream.h> #include <fstream.h> #include <ctype.h> // for toupper // Declare a structure for the record. struct Info { char name[51]; int age; char address1[51]; char address2[51]; char phone[14]; };
  83. 83. Starting Out with C++, 3rd Edition 83 Program continues void main(void) { fstream people("people.dat", ios::out | ios::binary); Info person; char again; if (!people) { cout << "Error opening file. Program aborting.n"; return; } do { cout << "Enter the following information about a ” << "person:n"; cout << "Name: ";
  84. 84. Starting Out with C++, 3rd Edition 84 Program continues cin.getline(person.name, 51); cout << "Age: "; cin >> person.age; cin.ignore(); // skip over remaining newline. cout << "Address line 1: "; cin.getline(person.address1, 51); cout << "Address line 2: "; cin.getline(person.address2, 51); cout << "Phone: "; cin.getline(person.phone, 14); people.write((char *)&person, sizeof(person)); cout << "Do you want to enter another record? "; cin >> again; } while (toupper(again) == 'Y'); people.close(); }
  85. 85. Starting Out with C++, 3rd Edition 85 Program Screen Output with Example Input Enter the following information about a person: Name: Charlie Baxter [Enter] Age: 42 [Enter] Address line 1: 67 Kennedy Bvd. [Enter] Address line 2: Perth, SC 38754 [Enter] Phone: (803)555-1234 [Enter] Do you want to enter another record? Y [Enter] Enter the following information about a person: Name: Merideth Murney [Enter] Age: 22 [Enter] Address line 1: 487 Lindsay Lane [Enter] Address line 2: Hazelwood, NC 28737 [Enter] Phone: (704)453-9999 [Enter] Do you want to enter another record? N [Enter]
  86. 86. Starting Out with C++, 3rd Edition 86 12.17 Random Access Files • Random Access means non-sequentially accessing informaiton in a file. Figure 12-11
  87. 87. Starting Out with C++, 3rd Edition 87 Table 12-7 Mode Flag Description io s ::b e g The offset is calculated from the beginning of the file. io s ::e n d The offset is calculated from the end of the file. io s ::c u r The offset is calculated from the current position.
  88. 88. Starting Out with C++, 3rd Edition 88 Table 12-8 Statement How it Affects the Read/Write Position F ile .s e e k p ( 3 2 L , io s ::b e g ) ; Sets the write position to the 33rd byte (byte 32) from the beginning of the file. f ile .s e e k p ( - 1 0 L , io s ::e n d ) ; Sets the write position to the 11th byte (byte 10) from the end of the file. f ile .s e e k p ( 1 2 0 L , io s ::c u r ) ; Sets the write position to the 121st byte (byte 120) from the current position. f ile .s e e k g ( 2 L , io s ::b e g ) ; Sets the read position to the 3rd byte (byte 2) from the beginning of the file. f ile .s e e k g ( - 1 0 0 L , io s ::e n d ) ; Sets the read position to the 101st byte (byte 100) from the end of the file. f ile .s e e k g ( 4 0 L , io s ::c u r ) ; Sets the read position to the 41st byte (byte 40) from the current position. f ile .s e e k g ( 0 L , io s ::e n d ) ; Sets the read position to the end of the file.
  89. 89. Starting Out with C++, 3rd Edition 89 Program 12-21 // This program demonstrates the seekg function. #include <iostream.h> #include <fstream.h> void main(void) { fstream file("letters.txt", ios::in); char ch; file.seekg(5L, ios::beg); file.get(ch); cout << "Byte 5 from beginning: " << ch << endl; file.seekg(-10L, ios::end); file.get(ch); cout << "Byte 10 from end: " << ch << endl;
  90. 90. Starting Out with C++, 3rd Edition 90 Program continues file.seekg(3L, ios::cur); file.get(ch); cout << "Byte 3 from current: " << ch << endl; file.close(); }
  91. 91. Starting Out with C++, 3rd Edition 91 Program Screen Output Byte 5 from beginning: f Byte 10 from end: q Byte 3 from current: u
  92. 92. Starting Out with C++, 3rd Edition 92 The tellp and tellg Member Functions • tellp returns a long integer that is the current byte number of the file’s write position. • tellg returns a long integer that is the current byte number of the file’s read position.
  93. 93. Starting Out with C++, 3rd Edition 93 Program 12-23 // This program demonstrates the tellg function. #include <iostream.h> #include <fstream.h> #include <ctype.h> // For toupper void main(void) { fstream file("letters.txt", ios::in); long offset; char ch, again; do { cout << "Currently at position " << file.tellg() << endl; cout << "Enter an offset from the beginning of the file: "; cin >> offset;
  94. 94. Starting Out with C++, 3rd Edition 94 Program continues file.seekg(offset, ios::beg); file.get(ch); cout << "Character read: " << ch << endl; cout << "Do it again? "; cin >> again; } while (toupper(again) == 'Y'); file.close(); }
  95. 95. Starting Out with C++, 3rd Edition 95 Program Output with Example Input Currently at position 0 Enter an offset from the beginning of the file: 5 [Enter] Character read: f Do it again? y [Enter] Currently at position 6 Enter an offset from the beginning of the file: 0 [Enter] Character read: a Do it again? y [Enter] Currently at position 1 Enter an offset from the beginning of the file: 20 [Enter] Character read: u Do it again? n [Enter]
  96. 96. Starting Out with C++, 3rd Edition 96 12.18 Opening a File for Both Input and Output • You may perform input and output on an fstream file without closing it and reopening it. fstream file(“data.dat”, ios::in | ios::out);
  97. 97. Starting Out with C++, 3rd Edition 97 Program 12-24 // This program sets up a file of blank inventory records. #include <iostream.h> #include <fstream.h> // Declaration of Invtry structure struct Invtry { char desc[31]; int qty; float price; }; void main(void) { fstream inventory("invtry.dat", ios::out | ios::binary); Invtry record = { "", 0, 0.0 };
  98. 98. Starting Out with C++, 3rd Edition 98 Program continues // Now write the blank records for (int count = 0; count < 5; count++) { cout << "Now writing record " << count << endl; inventory.write((char *)&record, sizeof(record)); } inventory.close(); }
  99. 99. Starting Out with C++, 3rd Edition 99 Program Screen Output Now writing record 0 Now writing record 1 Now writing record 2 Now writing record 3 Now writing record 4
  100. 100. Starting Out with C++, 3rd Edition 100 Program 12-25 // This program displays the contents of the inventory file. #include <iostream.h> #include <fstream.h> // Declaration of Invtry structure struct Invtry { char desc[31]; int qty; float price; }; void main(void) { fstream inventory("invtry.dat", ios::in | ios::binary); Invtry record = { "", 0, 0.0 };
  101. 101. Starting Out with C++, 3rd Edition 101 Program continues // Now read and display the records inventory.read((char *)&record, sizeof(record)); while (!inventory.eof()) { cout << "Description: "; cout << record.desc << endl; cout << "Quantity: "; cout << record.qty << endl; cout << "Price: "; cout << record.price << endl << endl; inventory.read((char *)&record, sizeof(record)); } inventory.close(); }
  102. 102. Starting Out with C++, 3rd Edition 102 Here is the screen output of Program 12-25 if it is run immediately after Program 12-24 sets up the file of blank records. Program Screen Output Description: Quantity: 0 Price: 0.0 Description: Quantity: 0 Price: 0.0 Description: Quantity: 0 Price: 0.0 Description: Quantity: 0 Price: 0.0 Description: Quantity: 0 Price: 0.0
  103. 103. Starting Out with C++, 3rd Edition 103 Program 12-26 // This program allows the user to edit a specific record in // the inventory file. #include <iostream.h> #include <fstream.h> // Declaration of Invtry structure struct Invtry { char desc[31]; int qty; float price; }; void main(void) {
  104. 104. Starting Out with C++, 3rd Edition 104 Program continues fstream inventory("invtry.dat", ios::in | ios::out | ios::binary); Invtry record; long recNum; cout << "Which record do you want to edit?"; cin >> recNum; inventory.seekg(recNum * sizeof(record), ios::beg); inventory.read((char *)&record, sizeof(record)); cout << "Description: "; cout << record.desc << endl; cout << "Quantity: "; cout << record.qty << endl; cout << "Price: "; cout << record.price << endl; cout << "Enter the new data:n"; cout << "Description: ";
  105. 105. Starting Out with C++, 3rd Edition 105 Program continues cin.ignore(); cin.getline(record.desc, 31); cout << "Quantity: "; cin >> record.qty; cout << "Price: "; cin >> record.price; inventory.seekp(recNum * sizeof(record), ios::beg); inventory.write((char *)&record, sizeof(record)); inventory.close(); }
  106. 106. Starting Out with C++, 3rd Edition 106 Program Screen Output with Example Input Which record do you ant to edit? 2 [Enter] Description: Quantity: 0 Price: 0.0 Enter the new data: Description: Wrench [Enter] Quantity: 10 [Enter] Price: 4.67 [Enter]
  107. 107. Starting Out with C++, 3rd Edition INSERTING DATA IN SORTED FILE • To insert data in sorted file,firstly approprite position is determined, • If record insert in mid of file then copy upper data from position in tempory files then insert new record. and copy the remaining record. • If we want to insert record in first position then append new record at first position and append rest of record. 107
  108. 108. Starting Out with C++, 3rd Edition • Similarly at last position do the same process.first determine the position and copy and append old data and then at last position append new records. • Now our temporary file will be ready to save on hard disk.so first delete the old file that is save on hard disk.and place the tempory file on disk and rename it to original file. • And close the file. 108
  109. 109. Starting Out with C++, 3rd Edition • Include<fstream.h> • Include<stdio.h> // for rename and remove • class student{ int rollno; • Char name[25]; • Char class [4]; • float marks; • Char grade; • Public : • Void getdata() • {cout<<“rollno.”<<“name”<<“class”<<“marks”; • Cin>>rollno>>name>>class>>marks; • if(marks>=75) grade =‘A’ else • If(marks>=60) grade=‘B’ else • else grade=‘f’; • } • Void putdata() • { cout<<rollno<<name<<marks<<grade<<endl; } • Void getrollno() {cout<< rollno ;} • }s1,stud; 109
  110. 110. Starting Out with C++, 3rd Edition • Void main() • { ifstream fin(“student.dat”,ios::in); / /student.dat must exist on disk • Ofstream fout(“temp.dat”,ios::out); • Char last=‘y’; //to determine whether new record • Cout<<“enter details of student whose record is to be inserted”; • S1.getdata; • While(!fin eof( ) ) //wheater end of file not coming • { fin.read ((char*) &student, sizeof(student));//read character of student and load size of student file in memory • If (s1.getrollno()<=student.getrollno()); //then • fout.write((char*) & s1,sizeof(s1)) • last=‘n’; • Break; • } • else • fout.write((char*)&student,sizeof(student)); • } to be continued…….. 110
  111. 111. Starting Out with C++, 3rd Edition • If(last= =‘y’) //if the next rollno greater than all rollnos in the file, then • fout.write ((char*)&s1,sizeof(s1)); • Else if (!fin.eof()) • {while(!fin.eof()) • { fin. read((char*) & student, size of(student)); • fout. write((char*) & student, size of(student)); • } • fin.close(); • fout.close(); • remove(“student.dat”); • rename(“temp.dat”,student.dat) • fin.open(“student.dat); //a new file will be created on the hard disk • Cout<<“A new file now contains ”; • While(!fin.eof()) • break; • Student. putdata(); • } • fin.close(); /file closed 111
  112. 112. Starting Out with C++, 3rd Edition • enter details of student whose record is to be inserted • Rollno-115 • Name-ramesh • Class-12th • Marks-88 • File now contains: • Rollno-102 name-joseph marks-81 grade-B • Rollno-104 name-riya marks-88 grade-A • Rollno-105 name-simran marks-77 grade-B • Rollno-115 name-ramesh marks-88 grade-B 112
  113. 113. Starting Out with C++, 3rd Edition DELETING AN EXISTING DATA FROM A FILE. • TO Delete data from an existing file,it has to be removed physiccally from the file.this may be achive the steps given below:- • The file is opened from the purpose of reading. • The user is asked to enter data to be deleted in a delete key. • Copy all data other than the one to be deleted into a temporary file. • Donot copy the data to be deleted. • Copy the remaining records of the file on the temporary file(temp.dat). • Delete the original file. • Rename the temporary file. As that of deleted file. • 113
  114. 114. Starting Out with C++, 3rd Edition 114
  115. 115. Starting Out with C++, 3rd Edition
  116. 116. Starting Out with C++, 3rd Edition 116
  117. 117. Starting Out with C++, 3rd Edition 117
  118. 118. Starting Out with C++, 3rd Edition 118
  119. 119. Starting Out with C++, 3rd Edition 119
  120. 120. Starting Out with C++, 3rd Edition 120
  121. 121. Starting Out with C++, 3rd Edition 121
  122. 122. Starting Out with C++, 3rd Edition 122
  123. 123. Starting Out with C++, 3rd Edition Modifying Data • To modify a record, follow these steps:- • First file is opened in input/output mode • give the beginning address of record being modified • After the record is modified in memory.the file pointer is once again placed at the beginning position of the record. • After that record is rerewitten. 123

×