免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 12233 | 回复: 9
打印 上一主题 下一主题

[C] 怎么把结构体的数据写到文件中 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-16 11:08 |只看该作者 |倒序浏览
如题,我用open,read,write等函数,想把结构体的数据写到文件里面,然后再读出来,不知道怎么弄

论坛徽章:
0
2 [报告]
发表于 2009-11-16 11:33 |只看该作者
把你的结构体作为buffer写到文件里面去就行了,读出来的时候一样

如果要考虑平台移植(重点是文件移到别的平台),写文件之前主机序转小端,读出以后小端转主机序即可
如果要考虑节省文件,好好把结构体对齐一下

OK了

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
3 [报告]
发表于 2009-11-16 11:47 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
4 [报告]
发表于 2009-11-16 12:29 |只看该作者
自己解析吧,不同成员字段可能不同,比如指针什么的,这就需要把对应内容也写入文件
结构就是一个类,C++里自定义实现输入输出,C里面也可以自定义实现读写文件
把写操作封装到一个函数里做,隐藏细节就可以

论坛徽章:
0
5 [报告]
发表于 2009-11-16 12:42 |只看该作者
你 google一下 序列化(serialize)  就都明白了

论坛徽章:
0
6 [报告]
发表于 2009-11-17 14:55 |只看该作者
原帖由 dhb118 于 2009-11-16 12:42 发表
你 google一下 序列化(serialize)  就都明白了

C语言可以序列化么?

论坛徽章:
0
7 [报告]
发表于 2009-11-17 15:19 |只看该作者
推荐xml....

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
8 [报告]
发表于 2009-11-22 19:39 |只看该作者
原帖由 oscarboycn 于 2009-11-17 14:55 发表

C语言可以序列化么?

不能。
可以使用XML或JSON把一个或若干个结构打包,转换成字符串写文件。

论坛徽章:
0
9 [报告]
发表于 2009-11-22 21:43 |只看该作者
原帖由 dpa321 于 2009-11-16 11:08 发表
如题,我用open,read,write等函数,想把结构体的数据写到文件里面,然后再读出来,不知道怎么弄


http://iunknown.javaeye.com/blog/319063

这里提到的工具可以实现结构体序列化和反序列化的功能。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
10 [报告]
发表于 2009-11-23 11:20 |只看该作者
原帖由 iunknown 于 2009-11-22 21:43 发表


http://iunknown.javaeye.com/blog/319063

这里提到的工具可以实现结构体序列化和反序列化的功能。

下帖也涉及这个问题:
http://bbs2.chinaunix.net/thread-1602940-2-2.html
不过它重点是读写数据库,但该软件包包括了对JSON的转换。
在12楼的元数据下,将从数据库读出的数据转换成JSON的程序如下:

testmeta_stu record;
。。。。。从数据库读数据->record。。。。。。
JSON_OBJECT file_json;
        file_json=json_object_new_object();
//结构序列化的过程
        struct_to_json(file_json,&record,testmeta_tpl,0);    //结构数据进入JSON对象
        fprintf(fd,"%s\n",json_object_to_json_string(file_json));//JSON变字符串并写入文件

        ...........
//结构反序列化的过程:
       fgets(buf,sizeof(buf),fd);
           file_json=json_parse_tokener(buf);//字符串变JSON
           json_to_struct(&record,file_json,testmeta_tpl);//JSON内容反序列化进入结构。
.......

交流一下。只要结构映射出来,什么都好办了。
更多的内容:
http://www.itpub.net/viewthread. ... p;extra=&page=1

其中DTO_toJSON()就是对struct_to_json()更深度的包装。后来改DAU_to_JSON()了。
二楼就是jSON输出端结果,当然可以写到文件。数据是数据库里读出来的,模板是根据数据库表结构自动构建的。
使用方法的文档在这里:请读DAU篇,序列化、反序列化都有。
http://bbs2.chinaunix.net/viewth ... p;extra=&page=8
感兴趣者回帖,可以提供源码。

[ 本帖最后由 yulihua49 于 2009-11-23 11:59 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP