如何编辑二进制文件中的特定值?

时间:2017-05-24 09:36:20

标签: c++

我有一个飞行结构,正在写入二进制文件,我想编辑飞行目的地,我不知道该怎么做。 这是我的用户输入和写入二进制文件的代码。

<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>

2 个答案:

答案 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