2021-09-04 文件操作

文件操作

在程序运行时产生的数据属于临时数据,程序一旦运行结束都会被释放,通过文件可以将数据持久化
对文件操作需要包含头文件
文件的类型
1、文本文件,文件以文本的ASCLL码形式存储在计算机中
2、二进制文件,文件以文本的二进制文件形式存储在计算机

操作文件的三大类
1、ofstream:写操作
2、ifstream:读操作
3、fstream:读写操作

写文件

//1、包含头文件
#include<fstream>
//2、创建对象流
ofstream ofs;
//3、打开文件
ofs.open("文件路径",打开方式);
//4、写数据
ofs << "写入的数据";
//5、关闭文件
ofs.close();

打开方式
在这里插入图片描述

文件打开方式可以配合使用,利用 | 操作符
如:用二进制方式写文件 : ios::binary | ios::out

//1、包含头文件
#include<fstream>
void test01()
{
//2、创建流对象
ofstream ofs;
//3、指定打开方式
ofs.open("文件路径",ios::out);
//4、写内容
ofs << "姓名:张三" << endl;	
ofs << "性别:男" << endl;
ofs << "年龄:18" << endl;
//5、关闭文件
ofs.close();
}

新建的文件,如果不指定文件,会默认存储在当前项目的目录下

读文件

//1、包含头文件
#include<fstream>
//2、创建对象流
ifstream ifs;
//3、打开文件,并且判断是否打开成功
ifs.open("文件路径",ios::in);
if(!ifs.is_open())//is_open() -> 判断是否打开成功,返回值的bool类
{
	cout << "打开失败" << endl;//路径写错或文件名写错等
	return;//如果打开失败函数直接结束
}
//4、读数据
<1>
char buf[1024] = {0};//字符数组,把文件中的数据都放在字符数组里
while (ifs >> buf)//当数据全部读入后会自动退出
{
	cout << buf << endl;//输出读入的数据
}
<2>
char buf[1024] = {0};
while(ifs.getline(buf,sizeof(buf)))//利用函数getline(char *, 最多读入的字节数)读一行文件,数组名指向第一个元素的地址类型正好是char *
{
	cout << buf << endl;//输出读入的数据
}
<3>
string buf;
while(getline(ifs,buf))//这里的getline(基础的输入流,准备好的字符串)是全局函数
{
	cout << buf << endl;//输出读入的数据
}
<4>//不推荐
char c;
while( (c= ifs.get()) != EOF )//EOF表示文件尾,end of file
{
	cout << buf << endl;//输出读入的数据
}
//5、关闭文件
ifs.close();

二进制文件

打开方式为 ios::binary
在这里插入图片描述

class Person
{
public:
	char m_name[64];//姓名
	int m_age;//年龄
};
void test01()
{
	//1、包含头文件
	//2、创建流对象
	ofstream ofs;
	//3、打开文件
	ofs.open("person.txt",ios::out | ios::binary);
	//或者可以在创建流对象的时候直接进行初始化
	// -> ofstream ofs("person.txt",ios::out | ios::binary);
	//4、写文件
	Person p = {"张三",18};
	ofs.write((const char *)&p, sizeof(Person));//对p取地址之后,其返回的类型是Person*,但函数的原型要求是const char *,所以要强转
	//关闭文件
	ofs.close();
}

用二进制写入的文件,打开看可能会出现乱码的情况,但如果再读回来没错就行

读二进制文件

class Person
{
public:
	char m_name[64];//姓名
	int m_age;//年龄
};
//二进制文件 读文件
void test01
{
	//包含头文件
	//创建流对象
	ifstream ifs;
	//打开文件 判断文件是否打开成功
	ifs.open("person.txt",ios::|ios::binary);
	if (!ifs.is_open())
	{
		cout << "文件打开失败" << endl;
		return;
	}
	//读文件
	Person p;
	ifs.read((char *)&p, sizeof(Person));
	cout << "姓名:" << p.m_name << "年龄:" << p.m_name << endl;
	//关闭文件
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值