【问题标题】:how to Read/Write multiple objects from file in C++?如何在 C++ 中从文件中读取/写入多个对象?
【发布时间】:2018-10-28 22:01:39
【问题描述】:

当我尝试将多个对象写入文件时正确完成。 但是当我尝试从文件中读取多个对象时,它只显示最后一个对象的数据。

将多个对象写入文件:-

for(int i=0;i<n;i++)
{

    s[i].getdata();

    ofstream file("Simple.txt");

    if(file.is_open())
    {
        cout<<"File created"<<endl; 
        file.write((char*)&s[i],sizeof(s[i]));
        file.close();
    }
    else
    {
        cout<<"File not Open../"<<endl;
    }

}

其中,s 是对象 在 for 循环中用作生成多个对象。

【问题讨论】:

  • 好吧,每次执行循环时都打开和关闭文件。您可能希望在循环之前打开文件并且关闭它,因为std::ofstream 的析构函数会为您执行此操作(除非您想明确地重新打开具有相同对象的文件)
  • 您好,欢迎来到 stackoverflow,您可能想访问 stackoverflow.com/help/how-to-ask 以获取有关如何完善您的问题的一些提示,这将有助于我们为您提供帮助:)
  • 请注意,在大多数情况下,天真地将对象的字节发送到 C++ 中的文件是行不通的,原因与天真地通过网络发送对象的字节行不通的原因相同:stackoverflow.com/questions/8485870/…

标签: c++ ubuntu


【解决方案1】:

当您执行ofstream file("Simple.txt"); 时,您正在以写入模式打开一个文件。 并且您正在为每次迭代做这件事。 这意味着每次你写一个文件时,它都是从头开始写的。即,您每次都在覆盖您的文件。 您应该尝试以附加模式打开。 这可能会有所帮助。

正如第一条评论所建议的那样,在每次迭代中打开和关闭文件并不是一个好主意。

希望这会有所帮助。

【讨论】:

    【解决方案2】:
    ...
    std::ofstream file;
    
    file.open("Simple.txt" | std::ofstream::app);
    ...
    

    您必须以附加模式打开文件。

    您也可以在循环之前声明文件句柄,然后只读取值,然后在循环之后关闭文件句柄。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多