您的位置:首页 > 编程语言 > C语言/C++

C++读写二进制文件

2016-03-12 16:51 330 查看
今天写一个小程序,本意是写入数据到文件中保存起来。起初直接使用write函数把类写入,结果发现读取文件的时候,总是出错。了解了一下以后才意识到,像类里的string变量,由于本身是对象,它里面维护的内存区域是在堆上的(也就是string内部有指针成员)。所以通过ofile.write((char*)s[i],sizeof(CStudent));将对象序列化到文件上这一行本身就是错误的(把指针写到文件有什么用?)。

因此如果要进行数据读写,直接保存类、结构对象是行不通的。需要单独各数据的保存,读取的时候也分别进行读入。

#include <stdio.h>
#include<string>
using namespace std;
struct student
{
string name;
string num;
string age;
};
void main()
{
FILE *fp;
char *buf, *p;
int nfileSize;
char terminator = 0;
struct student src;
struct student dst;
src.name = "nihao";
src.num = "123456";
src.age = "18";
//写入文件
fp = fopen("data.txt", "wb+");
fwrite(src.name.c_str(), 1, src.name.length(), fp);
fwrite(&terminator, 1, 1, fp);
fwrite(src.num.c_str(), 1, src.num.length(), fp);
fwrite(&terminator, 1, 1, fp);
fwrite(src.age.c_str(), 1, src.age.length(), fp);
fwrite(&terminator, 1, 1, fp);
fclose(fp);
//从文件中读取
fp = fopen("data.txt", "rb");
fseek(fp, 0, SEEK_END);
nfileSize = ftell(fp);
fseek(fp, 0, SEEK_SET);
buf = (char*)malloc(nfileSize);
fread(buf, 1, nfileSize, fp);
p = buf;
dst.name = p;
p = p + strlen(p) + 1;
dst.num = p;
p = p + strlen(p) + 1;
dst.age = p;
free(buf);
fclose(fp);
printf("Name: %s\nNum: %s\nAge:%s\n", dst.name.c_str(), dst.num.c_str(), dst.age.c_str());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: