读书人

,二进制文件的读写

发布时间: 2012-02-06 15:52:44 作者: rapoo

求助,二进制文件的读写.
有一个类,例如:
......
class Student
{
public:
void SetName();//置名字
void SetCalss();//置班级
protected:
char Name[20];
int class;
}
......
置了名字和班级后欲将数据保存到二进制文件里,则:
......
Student Stu;
fstream iof;
iof.seekg(0,ios::end);
iof.write((char*)&Stu,sizeof(Student));//这样写会不会有误?
......

有没有更好的解决办法?

[解决办法]
对于这个特定的结构,可以这样写,但最好不要这么写。理由如下:
1、有可能面临32位系统字节对齐的问题(还可能得考虑64位对齐问题),如果Name不是20个字节,而是21个字节,就会遇到这个问题。
2、修改问题,如果后来修改了这个类的定义,如添加了一个虚函数什么的,则前四个字节就是this指针了。
[解决办法]
一般说,每一个类都需要实现一些数据存储的支持函数,我的方法是
1、Load:清空当前数据,读入自定义的特定格式的数据;
2、Save: 保存当前自定义的特定格式的数据;
3、Import: 不清空当前数据,导入外来的XML格式的数据,检查格式,处理数据冲突;
4、Export:导出XML格式的数据;
5、重载> > 、 < <操作符,用Load、Save实现.

读书人网 >C++

热点推荐