在二进制文件上保存结构矢量

时间:2016-06-18 23:20:59

标签: c++ file vector binaryfiles

我需要在二进制文件中保存结构的向量,并在程序重新启动时获取此数据。

struct produc{
   string nanme;
   float price;
   int id;
   int idp;
};

vector <produc> products;

scanf("%s",des.c_str());
scanf("%d",&cod);
scanf("%d",&prov);
scanf("%f",&price);


produc pr;
pr.name = des.c_str();
pr.price=precio;
pr.id=cod; 
pr.idp=prov;  

products.push_back(pr);

这是我要求新数据并放置矢量的方式,然后我只使用for来显示信息。

int l = products.size();
produc pr;
for(int i=0;i<l;i++)
{
    pr = productos[i];
    cout << "\t Code        : " << pr.id     << endl;
    cout << "\t Product     : " << pr.nombre << endl;
    cout << "\t Prov Code.  : " << pr.idp    << endl;
    cout << "\t Priceo      : " << pr.precio << endl << endl;
}

我想将此向量保存在二进制文件中,如果我关闭程序将其恢复并将其放在向量上。我正在关注这篇文章的答案,但我很挣扎,不确定如何实现它How to read / write a struct in Binary Files?

编辑。

我实际上尝试单独编写/读取我的结构,但我想知道是否可以选择保存整个向量。无论哪种方式,我如何做它做工作因为当我尝试回读时我得到一个错误:分段错误(核心转储) 这就是我写的方式:

ofstream fichero("produts.data", ios::app | ios::binary);
if(!fichero) {
    cout << "Can't open";
}
fichero.write((char *) &pr, sizeof(produc));
fichero.close();

读:

ifstream fichero("produts.data", ios::in | ios::binary);
if(!fichero){
    cout << "Can't open";
    exit(0);        
}
fichero.read((char *)&pr,sizeof(produc));
fichero.close();

0 个答案:

没有答案