I’m having problems appending to a random-access file. I don’t seem to be able to overwrite a field within the file. Instead, I’m only appending to the file, and leaving the old name intact.
fstream Airline("AirLine.text", ios::out | ios::in | ios::app | ios::binary);
if(!Airline)
{
cout << "File Could not be opened." << endl;
system("PAUSE");
exit (1);
}
cout << "Enter Seat Number to Update" << "(1 to 100, 0 to end)?";
NewPassenger passenger;
cin >> passenger.seat_number;
while (0 < passenger.seat_number && passenger.seat_number <= 100)
{
Airline.seekp((passenger.seat_number - 1 ) * sizeof(NewPassenger));
Airline.read(reinterpret_cast<char *>(&passenger), sizeof(NewPassenger));
cout << " Found Record. Now Enter New Name:";
cin >> passenger.name;
Airline.seekg((passenger.seat_number - 1 ) * sizeof(NewPassenger),ios::beg);
Airline.write(reinterpret_cast<const char *>(&passenger), sizeof(NewPassenger));
cout << "\nEnter Seat Number: ?";
cin >> passenger.seat_number;
}
Airline.close();
cout << endl;
NewPassenger is defined as follows:
struct NewPassenger
{
int seat_number;
char name[20];
char onward[3];
};
Looking at cplusplus.com on
fstream::openI see the append flag described as(Emphasis added). It looks like you are getting the behavior you asked for. Perhaps you wanted