如何将结构数组写入二进制文件并再次读取?

时间:2017-01-24 06:49:57

标签: c++ arrays file struct

我正在将数组结构(因子是结构)写入二进制文件,如下所示:

factor factors[100];

ofstream fa("Desktop:\\fa.dat", ios::out | ios::binary);
fa.write(reinterpret_cast<const char*>(&factors),sizeof(factors));

fa.close();

我运行程序并在其中保存5条记录。在另一个文件中,我想阅读结构,所以我写了这个:

    int i=0;
ifstream a("Desktop:\\fa.dat", ios::in | ios::binary);

factor undelivered_Factors[100];

    while(a && !a.eof()){
        a.read(reinterpret_cast<char*>(&undelivered_Factors),sizeof(undelivered_Factors));
        cout<<undelivered_Factors[i].ID<<"\t"<<undelivered_Factors[i].total_price<<endl;
        i++;
    }
    a.close();

但是在阅读并打印了保存的因子之后,它会在数组中读取并显示它们中的第一个。为什么?我该怎么办?

2 个答案:

答案 0 :(得分:1)

ofstream :: write和:: read的第二个参数是 bytes 中的写入内存大小(又名&#39; char&#39;在C \ C ++中),这是对的 - 你&# 39;立即重写整个数组。在阅读过程中,你混淆了每个元素和数组处理。 期望读取整个数组,然后打印一个值,然后你读取另外100个记录中没有的记录,我猜想。 eof()也只在你尝试阅读时失败。如果你站在文件末尾,eof()没有被触发,这就是你打印两张记录的原因。

答案 1 :(得分:0)

您正在单次调用中完成读取,因此您的循环只运行一次,因此它将仅输出第一个struct值。像这样改变你的while循环:

if(a)
{
   a.read(reinterpret_cast<char*>(&undelivered_Factors),sizeof(undelivered_Factors));
}
for(int i=0; i<100; ++i)
{
   cout<<undelivered_Factors[i].ID<<"\t"<<undelivered_Factors[i].total_price<<endl;
}