前面学习了对文本文件的读写操作,有了这个基础,我们来学习下,C++对二进制文件的读写操作。因为是二进制,所以不管是读还是写文件,其中打开方式要指定为iso::binary。
1.写二进制文件
二进制方式写文件主要利用流对象调用成员函数write()
函数原型:ostream& write(const char * buffer, int len);
参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数
来看一个代码例子
#include <iostream>
using namespace std;
#include <fstream>
#include <string>
class Person
{
public:
string m_Name;
int m_Age;
};
void test01()
{
ofstream ofs;
ofs.open("test1.txt", ios::out | ios::binary);
Person p = {"Anthony", 28};
ofs.write( (const char *)&p, sizeof(p));
ofs.close();
}
int main()
{
test01();
system("pause");
return 0;
}
运行之后,在代码同目录下有一个test1.txt
一般二进制内容打开就是乱码,接下来我们学习读二进制文件,读出来然后打印到控制台内容就清楚了。
2.读二进制文件
二进制方式读文件主要利用流对象调用成员函数read()
函数原型:istream& read(char *buffer, int len);
参数解释:字符指针buffer指向内存中一段内存空间,len是读写的字节数
直接读取上面代码产生的test1.txt文件
#include <iostream>
using namespace std;
#include <fstream>
#include <string>
class Person
{
public:
string m_Name;
int m_Age;
};
void test01()
{
ifstream ifs; //把二进制文件内容Input到我们程序,所以需要使用input file stream
ifs.open("test1.txt", ios::in | ios::binary);
if(!ifs.is_open())
{
cout << "文件打开失败!" << endl;
return;
}
//读出来
Person p;
ifs.read((char *)&p, sizeof(Person));
cout << "姓名:" << p.m_Name << endl;
cout << "年龄:" << p.m_Age << endl;
ifs.close();
}
int main()
{
test01();
system("pause");
return 0;
}
运行控制台输出
总结:
二进制读文件,使用流对象的read()函数,写文件,使用流对象的write方法,其中读写方法的两个参数的含义是一样的,第一个参数指针这块,需要强制转换成函数的类型。