c++ - 附加随机访问文件

标签 c++ arrays char random-access

我在附加到随机访问文件时遇到问题。我似乎无法覆盖文件中的字段。相反,我只是附加到文件,并保持旧名称不变。

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 定义如下:

struct NewPassenger
{ 
    int seat_number;
    char name[20];
    char onward[3];
};

最佳答案

fstream Airline("AirLine.text", ios::out | ios::in | ios::app | ios::binary);

查看cplusplus.com on fstream::open我看到附加标志描述为

app (append) Set the stream's position indicator to the end of the stream before each output operation.

(强调)。看起来你正在得到你要求的行为。也许你想要

ate (at end) Set the stream's position indicator to the end of the stream on opening.

关于c++ - 附加随机访问文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8285396/

相关文章:

c++ - 在 R 包中强制重建源代码

c++ - 如何正确实现 `operator/` ?

c++ - DirectX 11调试器需要Windows SDK 10,但已在IDE中选择并在系统中显示

javascript - 使用javascript在每次迭代后存储foreach的值

arrays - 如何将基于日期项的数组数据分组到字典中

将多位整数从 char 数组转换为整数

php - 使用 PHP 和 C 从 svn diff 文件获取文件路径

jquery - Localstorage to JSON : How can I delete only 1 array inside a key since localstorage. remove Item 需要整个key

c++ - 为随机生成的字符串 C/C++ 打印字符,不在随机列表中的字符也被打印

java - 如何检测输入的字符串是否有多个连续空格?