gpt4 book ai didi

c++ - 将类的对象写入和读取二进制文件

转载 作者:IT老高 更新时间:2023-10-28 22:35:51 66 4
gpt4 key购买 nike

我尝试在 C++ 中将类对象写入和读取二进制文件。我不想单独编写数据成员,而是一次编写整个对象。举个简单的例子:

class MyClass {  
public:
int i;

MyClass(int n) : i(n) {}
MyClass() {}

void read(ifstream *in) { in->read((char *) this, sizeof(MyClass)); }
void write(ofstream *out){ out->write((char *) this, sizeof(MyClass));}
};

int main(int argc, char * argv[]) {
ofstream out("/tmp/output");
ifstream in("/tmp/output");

MyClass mm(3);
cout<< mm.i << endl;
mm.write(&out);

MyClass mm2(2);
cout<< mm2.i << endl;
mm2.read(&in);
cout<< mm2.i << endl;

return 0;
}

但是运行输出显示,应该写入二进制文件的 mm.i 的值没有被读取并正确分配给 mm2.i

$ ./main   
3
2
2

那有什么问题呢?

一般在二进制文件中写入或读取类的对象时应注意什么?

最佳答案

数据正在被缓冲,所以当你去读取它时它实际上并没有到达文件。由于您使用两个不同的对象来引用输入/输出文件,因此操作系统不知道它们之间的关系。

您需要刷新文件:

mm.write(&out);
out.flush()

或关闭文件(执行隐式刷新):

mm.write(&out); 
out.close()

您也可以通过让对象超出范围来关闭文件:

int main()
{
myc mm(3);

{
ofstream out("/tmp/output");
mm.write(&out);
}

...
}

关于c++ - 将类的对象写入和读取二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2046829/

66 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com