返回信息流RT,
存的时候是string类型,打开文件看到的是二进制?
其实就是希望客户可在界面上添加产品信息,不能在文件里对其进行修改,所以想把它变为二进制文件
这是一条镜像帖。来源:北邮人论坛 / cpp / #89511同步于 2015/11/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
如何存储string数据到二进制文件
jiamin
2015/11/23镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
思考几个问题:
字符串如何编码?(gb18030, utf8, utf16, shiftjis, ...)
换行符如何表示?(\n? \n\r? \r?)
要不要压缩?(gzip? bzip2? xz?)
要往一个文件里存几个字符串?怎么区分哪个是哪个?
我们走进医院抓中药,中药药房有几千种中药,我们如何区别陈皮、当归、莲子、砂仁、熟地、白芨...呢?
【 在 nuanyangyang 的大作中提到: 】
: 思考几个问题:
: 字符串如何编码?(gb18030, utf8, utf16, shiftjis, ...)
: 换行符如何表示?(\n? \n\r? \r?)
: ...................
让掌柜的帮你抓。。。什么?你就是掌柜的?这都分不出来怎么开药店啊。
【 在 FromSixToTen 的大作中提到: 】
: 我们走进医院抓中药,中药药房有几千种中药,我们如何区别陈皮、当归、莲子、砂仁、熟地、白芨...呢?
所以我们不需要管utf8、二进制、big5、gb2312等等乱七八糟的,这些都是操作系统的文件系统需要管的。
【 在 nuanyangyang 的大作中提到: 】
: 让掌柜的帮你抓。。。什么?你就是掌柜的?这都分不出来怎么开药店啊。
【 在 FromSixToTen 的大作中提到: 】
: 所以我们不需要管utf8、二进制、big5、gb2312等等乱七八糟的,这些都是操作系统的文件系统需要管的。
文件系统提供的抽象只是“文件是一串字节”,而不是字符。如果有朝一日文件系统开始用不同的方法储存文本文件,也许我们可以把这个问题放过,希望文件系统可以同时高效地存储英文、中文、日文、阿拉伯文等,其中有一点是,储存中文的时候希望尽可能高效,一个汉字尽可能占两个字节而不是三个字节(所以希望文件系统不要总是使用UTF8)。
在这一天到来之前,程序员不得不去思考“文本文件如何储存”这个简单的问题。主要的问题就在:字符到字节的编码,以及行尾用回车还是换行。当然,这么常见的问题,肯定有人帮我们想好了。iconv是一个很好的工具。
【 在 jiamin 的大作中提到: 】
: RT,
: 存的时候是string类型,打开文件看到的是二进制?
: 其实就是希望客户可在界面上添加产品信息,不能在文件里对其进行修改,所以想把它变为二进制文件
而且我觉得这个做法不对,能在界面里修改的,理论上就一定能在配置文件里修改。如果你不希望用户修改配置文件,直接告诉他们不要修改配置文件就可以了。不管怎么做,你能做到的就是让“修改配置文件”变得越来越难,而不是不可能。
但是为什么要这样做呢?大的趋势是将配置文件做得不仅机器可读,而且人也可读。最早的时候人们为了节省空间,真的是用二进制储存这些配置信息的;但是现在存储空间不再是问题,人们开始使用著名的带格式文本,如INI文件、XML、JSON、YAML等储存配置。这样,如果软件需要变更,这些配置文件只需要略微扩展语法即可,变更的难度比二进制文件小得多。而且,当用户需要从一个系统迁移到另一个系统的时候,文本文件也更容易转换;不同系统之间,使用著名的格式也容易交互。
美国的某个警察局曾经使用一个很老的软件,后来这个软件不能工作了。结果,这些私有的数据文件让负责迁移的程序员们花费了很大的功夫,但还是迁移了。私有的数据格式最终并没有能阻止用户查看和修改里面的数据。
即使到了那一天,人们还是会关心这个问题,就跟大夫给你开个药叫什么复方...,但是虽然你不懂,你还是要看看,然后问问这个东西干嘛的,这个必须要吃吗?等等。
【 在 nuanyangyang 的大作中提到: 】
:
: 文件系统提供的抽象只是“文件是一串字节”,而不是字符。如果有朝一日文件系统开始用不同的方法储存文本文件,也许我们可以把这个问题放过,希望文件系统可以同时高效地存储英文、中文、日文、阿拉伯文等,其中有一点是,储存中文的时候希望尽可能高效,一个汉字尽可能占两个字节而不是三个字节(所以希望文件系统不要总是使用UTF8)。
: 在这一天到来之前,程序员不得不去思考“文本文件如何储存”这个简单的问题。主要的问题就在:字符到字节的编码,以及行尾用回车还是换行。当然,这么常见的问题,肯定有人帮我们想好了。iconv是一个很好的工具。
: ...................