我有一个飞行结构,正在写入二进制文件,我想编辑飞行目的地,我不知道该怎么做。 这是我的用户输入和写入二进制文件的代码。
<Button x:Name="button" Content="Button" Click="clicked" MouseLeave="mouseleaved"/>
<Popup Name="popup" PlacementTarget="{Binding ElementName=button}" StaysOpen="True" MouseLeave="mouseleaved">
<Border Background="Yellow">
<TextBlock>contents...</TextBlock>
</Border>
</Popup>
答案 0 :(得分:0)
由于您的Flight_Details
在写入时具有固定的字节大小,因此很容易计算每个航班在文件中的位置。一般等式为flight_number * sizeof(Flight_Details)//where flight_number is 0..N
。这将计算要寻找的文件中的字节偏移量。从那里只需要从文件中准确读取sizeof(Flight_Details)
字节并将该缓冲区转换为Flight_Details
,在这种情况下,这可能意味着您只需填充Flight_Details
中的每个缓冲区手动的字节,或者如果您愿意,只需将reinterpret_cast()
char*
个数据转换为正确的类型(如果您的缓冲区长度恰好sizeof(Flight_Details)
,这将是一个不错的主意。通过某种构造函数手动复制字节更安全。
答案 1 :(得分:0)
以下是您在// edit file
评论下撰写的内容。这看起来很丑,但效果很好
cout << "Yeah we are editing\n";
char newdestiny[99];
cout << "new dest: ";
cin.getline(newdestiny, 99);
strcpy(flight[i].destination, newdestiny);
file.write((char*)flight, sizeof(Flight_Details[countOfFlights]));
file.close();
return 0;
并且您的程序中存在错误,例如当您要求离开时,您正在获取目的地,当您打开file
写入该数据时,您必须包含ios::app
标记,以便您可以输入新的航班信息以及(?)
我打开的文件只有ios::out
标志
还有一个strcmp(flight_d[i].destination, edit) == 0
行应该是strcmp(flight[i].destination, edit) == 0