c++二进制文件IO

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

#include <fstream>

using namespace std;

//二进制文件操作

class Person

{

public:

Person()

{

}

Person(int id, int age)

{

this->id = id;

this->age = age;

}

void show()

{

cout << "id = " << id << endl;

cout << "age = " << age << endl;

}

private:

int id;

int age;

};

int main()

{

//我们把对象p1和p2写进文件里,p1和p2本质是存储在内存中的二进制,因此写入文件里就相当于写二进制数据进文件

//把对象写进文件的操作称为对象序列化

Person p1(10, 20);

Person p2(30, 40);

//我们用文本模式去读文件时,默认把一行末尾的\r去掉,只留\n

//用二进制的方式读写

ofstream osm("C:\\Users\\ts\\Desktop\\target.txt", ios::out | ios::binary);

//写二进制时,则不能再直接用<<输入到文件了,<<操作符适用于基础类型,对于自定义的类,需要使用write方法,具体使用见下面一段代码

osm.write((char *)&p1, sizeof(p1));//把p1的地址强转为char *类型,再计算p1的长度

osm.write((char *)&p2, sizeof(p2));

osm.close();

Person p3;

Person p4;

ifstream ism("C:\\Users\\ts\\Desktop\\source.txt", ios::in | ios::binary);

ism.read((char *)&p3, sizeof(p3));//从文件读取p1的数据,并写进p3的空间

ism.read((char *)&p4, sizeof(p4));//因为这是同一个对象ism即同一个流,读取时是自动定位到读取之后第一个数据,因此连续读取时,不是读同一块数据,而是一直往后读

p3.show();

p4.show();

return 0;

}

猜你喜欢

转载自blog.csdn.net/tulipless/article/details/81135157