Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 附加随机访问文件_C++_Arrays_Char_Random Access - Fatal编程技术网

C++ 附加随机访问文件

C++ 附加随机访问文件,c++,arrays,char,random-access,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); } cou

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

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;

使用带有正确位置参数的
seekg

seekg(abs_pos, std::ios::beg);  // seek relative to the beginning
默认值为
std::ios::cur
,即相对于当前位置

相同,请参见kp


具体来说,你可以这样说:

Airline.seekp((passenger.seat_number - 1 ) * sizeof(Newpassenger), std::ios::beg);
//                                                               ^^^^^^^^^^^^^^^

使用带有正确位置参数的
seekg

seekg(abs_pos, std::ios::beg);  // seek relative to the beginning
默认值为
std::ios::cur
,即相对于当前位置

相同,请参见kp


具体来说,你可以这样说:

Airline.seekp((passenger.seat_number - 1 ) * sizeof(Newpassenger), std::ios::beg);
//                                                               ^^^^^^^^^^^^^^^

查看,我看到append标志描述为

app(append)在每次输出操作之前,将流的位置指示器设置到流的末尾

(重点补充)。看起来你得到了你要求的行为。也许你想要

ate(在末端)将流的位置指示器设置为打开时流的末端

查看,我看到append标志描述为

app(append)在每次输出操作之前,将流的位置指示器设置到流的末尾

(重点补充)。看起来你得到了你要求的行为。也许你想要

ate(在末端)将流的位置指示器设置为打开时流的末端


用我的代码将座位号改为-1,然后转到我输入的座位号,然后它会用我输入的乘客姓名替换乘客姓名。你能在更多的代码中显示seekg吗?让代码保持原样,只在seek命令中添加第二个参数。好的,我在末尾添加了它。如果我在跟踪你,但它告诉我未声明的标识符“abs_pos”[代码]Airline.seekg((passenger.seat_number-1)*sizeof(Newpassenger),(abs_pos,ios::beg));[code]不,不,我只有一个例子。你应该把你自己的代码放进去,而不是像这样写:Airline.seekp((passenger.seat_number-1)*sizeof(Newpassenger),std::ios::beg);`。我将编辑帖子…@user1058717,然后从
std::ios::beg
中省略
std:
。也就是说,
使用名称空间std不正确。使用我的代码,请将座位号设置为-1,然后转到我输入的座位号,然后将乘客姓名替换为我输入的乘客姓名。你能在更多的代码中显示seekg吗?让代码保持原样,只在seek命令中添加第二个参数。好的,我在末尾添加了它。如果我在跟踪你,但它告诉我未声明的标识符“abs_pos”[代码]Airline.seekg((passenger.seat_number-1)*sizeof(Newpassenger),(abs_pos,ios::beg));[code]不,不,我只有一个例子。你应该把你自己的代码放进去,而不是像这样写:Airline.seekp((passenger.seat_number-1)*sizeof(Newpassenger),std::ios::beg);`。我将编辑帖子…@user1058717,然后从
std::ios::beg
中省略
std:
。也就是说,
使用名称空间std不好。谢谢,我将应用程序更改为ate,它成功了。。这是做我的头在大约4小时…谢谢你,我改变了应用程序吃,它的工作。。这让我头疼了大约4个小时。。。