当前位置: 首页 > 知识库问答 >
问题:

c++ - 想问下,C++,怎么把一个对象的内容保存在磁盘的文件里呢?

尹何平
2023-11-15

我在用qt,比方说我设计了一个类.

class F{    QString str;    int a;    QDate date;};

然后我的程序运作时需要一个这个类的数组,比方说

vector<F>v;

这么个数组.
现在我希望,我能把这个数组内的F对象的内容写到磁盘上,这样我下次还能再用这份数据.
但我总觉得自己的实现非常笨拙,我是把QDate类直接当作3个数字,QString当作一个字符串,用^当作成员之间的分隔符,用换行符当作元素之间的分隔符,打印出一个文件...
感觉很笨拙,想问下有什么高明的手法吗?

共有1个答案

葛承嗣
2023-11-15

我觉得你是在说对象的序列化和反序列化。序列化就是把对象转成字符流或字节流以便传输或存储,反序列化就是从数据里恢复对象。
在java里我们有专门的对象序列化接口,实现这个接口就可以将对象序列化成字节流写到文件里,然后也可以通过文件读取字节流再把它转成对象。
除了java特有的序列化,我觉得可能很多语言包括python和c++等都可以用json作为序列化方案,就是把对象写到json文件里面,这样也有助于在异构的程序间传递数据。json文件的格式很好理解,比如你的对象就可以写成

{  "str": "abcdefg",  "a": 123456,  "date": "2023-11-15"}

在json里表示列表可以用中括号[],比如表示一个你的对象的列表可以是

[{  "str": "abcdefg",  "a": 123456,  "date": "2023-11-15"},{  "str": "vwxyz",  "a": 98765,  "date": "2023-11-14"}]

我觉得c++大概率是有json序列化和反序列化库的,可以试着找一下?

 类似资料:
  • 想问一下一个C语言的位运算小问题. 有没有一个简单的表达式的写法,可以得到一个32位无符号数,只保留其最左侧或者最右侧的1的结果? 比如35=(000..0100011),得到32或者1? 用循环写的话不难,但,用一个简洁的表达式能写出来吗?

  • 我正在Windows服务器上使用C#处理存储在IIS服务器上的web应用程序。 null

  • 第一次遇到这种文件,怎么把他们还原成能在navicat里查看的数据库?

  • 本文向大家介绍请你来说一下C++里是怎么定义常量的?常量存放在内存的哪个位置?相关面试题,主要包含被问及请你来说一下C++里是怎么定义常量的?常量存放在内存的哪个位置?时的应答技巧和注意事项,需要的朋友参考一下 常量在C++里的定义就是一个top-level const加上对象类型,常量定义必须初始化。对于局部对象,常量存放在栈区,对于全局对象,常量存放在全局/静态存储区。对于字面值常量,常量存放

  • 问题内容: 我有敏感文件要下载给用户,每个用户只能 下载 给定文件一次。如果下载失败,我希望允许重新下载,但不允许其他方式。 仅仅依靠在服务器上记录/处理文件下载 请求 是不够的-我需要确定性地知道文件何时完成以及在客户端是否就位,因为我的许多用户都在频繁掉线的环境中工作。 最有效的方法是,浏览器从“另存为…”对话框中暴露出一个“文件已保存”事件,该事件可能会链接到下载页面上的JavaScript

  • 我有一个stl容器,它保存了很多数据。 例如,定义是: 我想要的是将它保存在一个文件中,然后下次,我可以读取这个文件来快速恢复它。 我觉得正常的方式,比如: 不起作用,因为它只保存指针。 那么,如何将其保存在文件中并通过读取文件恢复呢?