【问题标题】:writing structures using fstream in c++在 C++ 中使用 fstream 编写结构
【发布时间】:2018-01-29 17:32:33
【问题描述】:

请告诉我,下一行是把结构变量的地址写入文件还是写入结构成员的值。

 file_write.write((char*)&structure_data,sizeOfStructure);

其中 file_write 是 fstream 的对象,“structure_data”是一个具有 3 个整数数据类型成员的结构。谢谢。

【问题讨论】:

  • 它接受structure_data 的任何内容,并将这些字节块复制到文件中。它不知道成员是什么。此外,这也是导致数千个 SO 问题像这样错误地进行编码的原因,其中 structure_data 不能以这种方式写入文件并使文件有意义。查找对象序列化
  • 不是写地址,而是写结构体中的数据。现在取决于可能不符合您期望的结构
  • write 也采用char*,因此您在此处转换为char*,这会导致实现定义的行为。
  • 请为我推荐一个有效的替代方案。@PaulMcKenzie
  • @Ehtesham 查看我给出的答案。最简单的方法是使用运算符<< 为每个项目将每个成员写入文件。

标签: c++


【解决方案1】:

这一行:

file_write.write((char*)&structure_data,sizeOfStructure);

获取structure_data 的任何内容,并将构成structure_data 的那些字节块复制到文件中。

它不知道成员是什么。此外,这也是导致数千个 SO 问题错误地进行编码的原因,其中 structure_data 不能以这种方式写入文件并且文件内容有意义。当试图将数据读回到程序中时,很快发现文件的内容是无用的 不成功。

大多数情况下,structure_data 将包含指针或与 C 布局不兼容的成员,即非 POD 类型,例如 std::stringstd::vector,基本上呈现这种写入技术像这样的文件完全没用(而且无效)。

查找对象序列化如this link on the topic

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多