一、基本概念
以二进制的方式对文件进行读写操作
打开方式指定为 ios::binary
优点:可以写入自己定义的数据类型
1、写文件
二进制方式写文件:流对象调用成员write
- 函数原型:ostream& write(const char * buffer,int len);
- 参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数
- 写文件步骤:包含头文件-->创建数据流-->打开文件-->ofs.write写文件-->关闭文件
注意ofs.write(const char * buffer,int len),这里需要的buffer的数据类型const char * !!!(强转)
2、读文件
二进制读文件:流对象调用成员函数read
- 函数原型:istream& read(char *buffer,int len);
- 参数解释:字符指针buffer指向内存中一段存储空间,len是读写的字节数
- 读文件步骤:包含头文件-->创建数据流-->打开文件-->ofs.read读文件-->关闭文件
注意ifs.write(char * buffer,int len),这里需要的buffer的数据类型char * !!!(强转)
二、代码实现
1、写文件
#include<iostream>
using namespace std;
#include<fstream>
//二进制文件 写文件
class Person
{
public:
char m_Name[64];//姓名
int m_Age;//年龄
};
void test01()
{
//1、包含头文件fstream
//2、创建流对象
ofstream ofs("D:\\C++\\c++class\\第二部分\\file\\person.txt", ios::out | ios::binary);
//3、打开文件
//ofs.open("D:\\C++\\c++class\\第二部分\\file\\person.txt",ios::out|ios::binary)
//4、写文件
Person p = { "Susan",18 };
ofs.write((const char*)&p, sizeof(Person)); //p取地址& p;但是要求const char *;所以强转(const char*)&p
//5、关闭文件
ofs.close();
}
int main()
{
test01();
system("pause");
return 0;
}
2、读文件
#include<iostream>
using namespace std;
#include<fstream>
//二进制文件 读文件
class Person
{
public:
char m_Name[64];//姓名
int m_Age;//年龄
};
void test01()
{
//1、包含头文件fstream
//2、创建流对象
ifstream ifs("D:\\C++\\c++class\\第二部分\\file\\person.txt", ios::in | ios::binary);
//3、打开文件
//ifs.open("D:\\C++\\c++class\\第二部分\\file\\person.txt",ios::out|ios::binary)
//判断文件是否打开成功
if (!ifs.is_open())
{
cout << "文件打开失败" << endl;
return;
}
//4、写文件
Person p ;
ifs.read((char*)&p, sizeof(Person));
cout << "姓名:" << p.m_Name << " 年龄:" << p.m_Age << endl;
//5、关闭文件
ifs.close();
}
int main()
{
test01();
system("pause");
return 0;
}