15 个解决方案
#1
#2
不要试图把 整个类对象 所在的内存块写到文件中
类里提供2个方法
string ToString() const; 将自己转换成 字符流
bool FromString(); 将字符流解析后填充到各成员变量中
文件里就存字符流
类里提供2个方法
string ToString() const; 将自己转换成 字符流
bool FromString(); 将字符流解析后填充到各成员变量中
文件里就存字符流
#3
@mougaidong 这个网页也太。。。。,看不懂哦,有没有个简单的解释呢,谢谢
#4
是文本方式还是二进制方式。
文本方式简单,怎么打印到屏幕,就打印到文件中。注意空格和换行。
二进制方式复杂一些,要写对象实际的内容,而不是写对象的地址。
典型例子的就是string,不能直接二进制读写string,要读写string.c_str()
文本方式简单,怎么打印到屏幕,就打印到文件中。注意空格和换行。
二进制方式复杂一些,要写对象实际的内容,而不是写对象的地址。
典型例子的就是string,不能直接二进制读写string,要读写string.c_str()
#5
@wangjunsheng 什么类?fromstring()能解析出来么
#6
序列化与反序列化。
#7
要看对象的结构。
包含指针,和有基类的,最好写输入输出, 接口函数。
简单类型,可以直接输出,文本,二进制都可以。
如果要确保任何平台,数据都一致,那就定义好数据长度,并按照某种方式统一读写。
int 这样的原生数据的长度,是不靠谱的,所以二进制存储的持久化很成问题。
以编码格式保存为文本类型,很靠谱;
不过,你的程序要象编译器那样,处理各种数据到字符串的转换,以及反转换。
包含指针,和有基类的,最好写输入输出, 接口函数。
简单类型,可以直接输出,文本,二进制都可以。
如果要确保任何平台,数据都一致,那就定义好数据长度,并按照某种方式统一读写。
int 这样的原生数据的长度,是不靠谱的,所以二进制存储的持久化很成问题。
以编码格式保存为文本类型,很靠谱;
不过,你的程序要象编译器那样,处理各种数据到字符串的转换,以及反转换。
#8
建议:使用json作为中间格式进行序列化和反序列化。
写文件:自定义对象 -> json对象 -> 字符串 -> 文件
读文件:文件 -> 字符串 -> json对象 -> 自定义对象
C++基本类型到json对象的转换可以使用jsoncpp来完成,自定义类型则可以在此基础上封装一下,到最后其实就是两个函数:
template<typename T>
bool Serialize(const T& obj_val, std::wstring& json_val);
template<typename T>
bool Deserialize(const std::wstring& json_val, T& obj_val);
接口就是这样。具体的实现看个人。
提示:C++不支持反射,并不能直接以字符串的形式遍历自定义结构的所有成员,所以简单的做法是一个一个成员来搞,这就是纯体力活。如果有很多的自定义结构,可以考虑写个脚本来做这种重复的工作。
使用其他的格式,比如xml,也是类似的思路。
写文件:自定义对象 -> json对象 -> 字符串 -> 文件
读文件:文件 -> 字符串 -> json对象 -> 自定义对象
C++基本类型到json对象的转换可以使用jsoncpp来完成,自定义类型则可以在此基础上封装一下,到最后其实就是两个函数:
template<typename T>
bool Serialize(const T& obj_val, std::wstring& json_val);
template<typename T>
bool Deserialize(const std::wstring& json_val, T& obj_val);
接口就是这样。具体的实现看个人。
提示:C++不支持反射,并不能直接以字符串的形式遍历自定义结构的所有成员,所以简单的做法是一个一个成员来搞,这就是纯体力活。如果有很多的自定义结构,可以考虑写个脚本来做这种重复的工作。
使用其他的格式,比如xml,也是类似的思路。
#9
XML
#10
@yao050421103 话说json不是用在js上的么?可以用在C++上么,可不可以举个例子
#11
具体怎么转换呢。。类中有指针,怎么转换成字符串呢
#12
json和语言无关,任何语言都可以使用这种格式。使用方法参考jsoncpp的相关代码和文档。
https://github.com/rboulton/jsoncpp
https://github.com/rboulton/jsoncpp
#13
指针根据用途转换,如果是简单链式结构,对链上的每个数据进行存储就可以了
如果比较复杂要同时存储数据和结构(指针改成偏移量或者索引值)
如果只是指向某种数据的指针,可以只存储数据。
比如字符串指针,不要存储指针,存贮字符串就可以了,需要的话现存长度。
如果指向的指针是单一数据,存储该数据,
如果指向的是数组那样的数据,存储数据个数和数组各个元素。
简单的说,就是存储实际数据。
结构复杂的数据,可能要存储数据的结构信息,比如 树,比如图形,图像。
如果,你需要从存储的数据,原样重建数据本身。
那就要同时保存数据类型信息。
比如Tiff图像
既存储数据,也存储数据类型。
数据库也是这样。
#14
mfc中的 对象序列化机制吧。
#15
也有同样的问题,课设要求的是建立二个文件,输入客户的必要信息,能对文件进行显示、输入、修订、删除等。但是运行完一个函数时,数据并没有存入文件,显示也显示不了
#1
https://code.google.com/p/protobuf/
http://www.boost.org/doc/libs/1_54_0/doc/html/interprocess/managed_memory_segments.html#interprocess.managed_memory_segments.managed_mapped_files
http://www.boost.org/doc/libs/1_54_0/doc/html/interprocess/managed_memory_segments.html#interprocess.managed_memory_segments.managed_mapped_files
#2
不要试图把 整个类对象 所在的内存块写到文件中
类里提供2个方法
string ToString() const; 将自己转换成 字符流
bool FromString(); 将字符流解析后填充到各成员变量中
文件里就存字符流
类里提供2个方法
string ToString() const; 将自己转换成 字符流
bool FromString(); 将字符流解析后填充到各成员变量中
文件里就存字符流
#3
@mougaidong 这个网页也太。。。。,看不懂哦,有没有个简单的解释呢,谢谢
#4
是文本方式还是二进制方式。
文本方式简单,怎么打印到屏幕,就打印到文件中。注意空格和换行。
二进制方式复杂一些,要写对象实际的内容,而不是写对象的地址。
典型例子的就是string,不能直接二进制读写string,要读写string.c_str()
文本方式简单,怎么打印到屏幕,就打印到文件中。注意空格和换行。
二进制方式复杂一些,要写对象实际的内容,而不是写对象的地址。
典型例子的就是string,不能直接二进制读写string,要读写string.c_str()
#5
@wangjunsheng 什么类?fromstring()能解析出来么
#6
序列化与反序列化。
#7
要看对象的结构。
包含指针,和有基类的,最好写输入输出, 接口函数。
简单类型,可以直接输出,文本,二进制都可以。
如果要确保任何平台,数据都一致,那就定义好数据长度,并按照某种方式统一读写。
int 这样的原生数据的长度,是不靠谱的,所以二进制存储的持久化很成问题。
以编码格式保存为文本类型,很靠谱;
不过,你的程序要象编译器那样,处理各种数据到字符串的转换,以及反转换。
包含指针,和有基类的,最好写输入输出, 接口函数。
简单类型,可以直接输出,文本,二进制都可以。
如果要确保任何平台,数据都一致,那就定义好数据长度,并按照某种方式统一读写。
int 这样的原生数据的长度,是不靠谱的,所以二进制存储的持久化很成问题。
以编码格式保存为文本类型,很靠谱;
不过,你的程序要象编译器那样,处理各种数据到字符串的转换,以及反转换。
#8
建议:使用json作为中间格式进行序列化和反序列化。
写文件:自定义对象 -> json对象 -> 字符串 -> 文件
读文件:文件 -> 字符串 -> json对象 -> 自定义对象
C++基本类型到json对象的转换可以使用jsoncpp来完成,自定义类型则可以在此基础上封装一下,到最后其实就是两个函数:
template<typename T>
bool Serialize(const T& obj_val, std::wstring& json_val);
template<typename T>
bool Deserialize(const std::wstring& json_val, T& obj_val);
接口就是这样。具体的实现看个人。
提示:C++不支持反射,并不能直接以字符串的形式遍历自定义结构的所有成员,所以简单的做法是一个一个成员来搞,这就是纯体力活。如果有很多的自定义结构,可以考虑写个脚本来做这种重复的工作。
使用其他的格式,比如xml,也是类似的思路。
写文件:自定义对象 -> json对象 -> 字符串 -> 文件
读文件:文件 -> 字符串 -> json对象 -> 自定义对象
C++基本类型到json对象的转换可以使用jsoncpp来完成,自定义类型则可以在此基础上封装一下,到最后其实就是两个函数:
template<typename T>
bool Serialize(const T& obj_val, std::wstring& json_val);
template<typename T>
bool Deserialize(const std::wstring& json_val, T& obj_val);
接口就是这样。具体的实现看个人。
提示:C++不支持反射,并不能直接以字符串的形式遍历自定义结构的所有成员,所以简单的做法是一个一个成员来搞,这就是纯体力活。如果有很多的自定义结构,可以考虑写个脚本来做这种重复的工作。
使用其他的格式,比如xml,也是类似的思路。
#9
XML
#10
@yao050421103 话说json不是用在js上的么?可以用在C++上么,可不可以举个例子
#11
要看对象的结构。
包含指针,和有基类的,最好写输入输出, 接口函数。
简单类型,可以直接输出,文本,二进制都可以。
如果要确保任何平台,数据都一致,那就定义好数据长度,并按照某种方式统一读写。
int 这样的原生数据的长度,是不靠谱的,所以二进制存储的持久化很成问题。
以编码格式保存为文本类型,很靠谱;
不过,你的程序要象编译器那样,处理各种数据到字符串的转换,以及反转换。
具体怎么转换呢。。类中有指针,怎么转换成字符串呢
#12
json和语言无关,任何语言都可以使用这种格式。使用方法参考jsoncpp的相关代码和文档。
https://github.com/rboulton/jsoncpp
https://github.com/rboulton/jsoncpp
@yao050421103 话说json不是用在js上的么?可以用在C++上么,可不可以举个例子
#13
要看对象的结构。
包含指针,和有基类的,最好写输入输出, 接口函数。
简单类型,可以直接输出,文本,二进制都可以。
如果要确保任何平台,数据都一致,那就定义好数据长度,并按照某种方式统一读写。
int 这样的原生数据的长度,是不靠谱的,所以二进制存储的持久化很成问题。
以编码格式保存为文本类型,很靠谱;
不过,你的程序要象编译器那样,处理各种数据到字符串的转换,以及反转换。
具体怎么转换呢。。类中有指针,怎么转换成字符串呢
指针根据用途转换,如果是简单链式结构,对链上的每个数据进行存储就可以了
如果比较复杂要同时存储数据和结构(指针改成偏移量或者索引值)
如果只是指向某种数据的指针,可以只存储数据。
比如字符串指针,不要存储指针,存贮字符串就可以了,需要的话现存长度。
如果指向的指针是单一数据,存储该数据,
如果指向的是数组那样的数据,存储数据个数和数组各个元素。
简单的说,就是存储实际数据。
结构复杂的数据,可能要存储数据的结构信息,比如 树,比如图形,图像。
如果,你需要从存储的数据,原样重建数据本身。
那就要同时保存数据类型信息。
比如Tiff图像
既存储数据,也存储数据类型。
数据库也是这样。
#14
mfc中的 对象序列化机制吧。
#15
也有同样的问题,课设要求的是建立二个文件,输入客户的必要信息,能对文件进行显示、输入、修订、删除等。但是运行完一个函数时,数据并没有存入文件,显示也显示不了