c++ - 使用二进制模式将数据结构写入文件

标签 c++ c binaryfiles data-persistence

代码如下所示:

struct Dog {
  string name;
  unsigned int age;
};

int main()
{
    Dog d = {.age = 3, .name = "Lion"};
    FILE *fp = fopen("dog.txt", "wb");
    fwrite(&d, sizeof(d), 1, fp);   //write d into dog.txt
}

我的问题是将数据对象或结构写入二进制文件有什么意义?我认为这是为了使正在运行的程序中生成的数据持久化,对吧?如果是,那么我怎样才能取回数据?使用 fread

这让我想到了类似数据库的东西,数据库以同样的方式将数据写入磁盘?

最佳答案

你可以做到,但是你会有很多问题需要关心:

  • 结构类型:您的所有数据真的都需要放入结构中,或者您可以只写一个指向其他地方的指针。
  • 结构更改:如果您需要更改结构,则需要编写一个转换器来读取旧结构并编写新结构。
  • 语言互操作性:将很难使用其他语言访问数据

在关系数据库普及之前的早期,这是一种常见的做法。您可以使索引文件指向记录号。

但是现在我会建议您进行序列化并编写字符串而不是二进制文件。

注意: 如果字符串类似于 char[40] 你的代码可能会存活下来......字符串对象字符不在您的结构中,而是在堆中。

关于c++ - 使用二进制模式将数据结构写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11980212/

相关文章:

c++ - 不可复制的成员是否可以用作使对象不可复制的替代方法?

c++ - cpp Qt 模型不更新 QML View

c++ - 为什么 ofstream 中的 << 运算符不是常量?

c - c 中的 remove() 在函数中不起作用

c - 如何从目标文件生成纯二进制文件?

io - 在 Nim 中写入/读取二进制文件

python - 使用 Python 模块 fileinput 读取多个二进制文件的单个字节

c++ - 在 boost spirit 解析器中使用指针作为合成属性

c - 将整数的每个数字提取到数组中?

c - 在main()中调用函数时遇到麻烦