0

我正在尝试在“CustomerDetails”文件中读取我之前编写的对象(现在文件中只有一个对象)。我的程序总是在被计算后突然终止read first object

我在这里做错了什么?

ifstream file;
try
{
  file.open("CustomerDetails.dat",fstream::in|fstream::binary);
  if(file.is_open())
  {
    while(1)
    {
      cout<<"Current Position\n"<<file.tellg()<<endl;
      file.read((char*)this,sizeof(*this));
      if(file.eof()) break;

      cout<<"read first object\n";
      if(!(this->accountNo).compare(accountNumber)&& this->isDeleted==false)
      {
          cout<<"Account Found!!\n Current Balance="<<this->balanceAmount<<endl;
      }              
      cout<<"End of loop loop\n";            
    }
  }
  else
  {
      cout<<"Error opening file.\n";
  }
  file.close();
}
catch(...)
{
  cout<<"Exception Caught\n";
}
4

1 回答 1

0

本质上,您在这里的想法仅适用于非常特定的情况,即数据始终按顺序在单个块中的内存中。对于任何甚至稍微复杂的情况(特别是如果有一个字符串它永远不会工作),这都是简单的而不是正确的。

该分配似乎暗示您应该将 >> 运算符覆盖到输出流,然后将类的每个元素写入流,独立地注意长度或使用中断字符来指示可变长度数据的结束位置。正如评论中所建议的,这不是一项微不足道的任务。

类似地,反序列化代码必须从流中反转这个过程。

于 2013-10-23T07:38:01.793 回答