从二进制文件中读取对象

时间:2015-06-14 11:50:27

标签: c++ file binary

我编写了一个程序,它允许您输入有关汽车的信息,然后将该对象写入二进制文件。

Car car_obj; std::ofstream entr; std::ifstream ex; 
void save_data() {

entr.open("main.bin", std::ios::app | std::ios::binary);

    car_obj.setInfo(); entr.write((char*)&car_obj, sizeof (car_obj));

entr.close();

}

在此之后,我有一个函数正在读取这个二进制文件,以便显示所有燃料消耗低于用户输入的汽车(数字在函数参数中是factr)。

void vehicles_under_factr(float factr) {

ex.open("main.bin", std::ios::app | std::ios::binary);


while (ex.read((char*)&car_obj, sizeof (car_obj)) && !ex.eof()) {

    if (car_obj.fuel_cons < factr) {

        car_obj.displayInfo();

    }
} 

ex.close();

}

它工作正常,但只有我的二进制文件中有三个或更少的对象。当有三个以上时,它将其余显示为空字段。好像第三辆车后没有通道。为什么会如此,我该怎么办呢?

我觉得接近解决方案,但我的知识有限。提前谢谢!

1 个答案:

答案 0 :(得分:0)

不,你不能这样做,读取((char *)obj,sizeof(obj)),因为程序中的每个对象都有自己的内存地址,由系统分配。你不能读地址 从文件。如果你的对象只包含数据,它工作正常,但如果它的元素是一个对象,它本身属性相关的内存地址或迭代器(相关的内存地址)。它失败了。