文件的读取和写入

程序运行时产生的数据都属于临时数据,程序运行结束后会被释放

通过文件可以将数据持久化(可以解决之前通讯录案例的保存问题)

C++中对文件操作需要包含头文件< fstream >

文件类型分为两种:

1、文件文件-文件以文本的ASCII码储存在计算机中

2、二进制文件-文件以文本的二进制心事储存在计算机中

操作文件的三大类:

1、ofstream:写操作

2、ifstream:读操作

3、fstream:读写操作

写文件:

#include<iostream>
using namespace std;
#include <fstream>//包含头文件

//文本文件 写文件

void test1()
{
	//1、包含头文件fstream
	//2、创建流对象
	ofstream ofs;//命名为ofs的流对象

	//3、指定打开方式
	ofs.open("test.txt", ios::out);//指定写文件的打开方式
	//4、写内容
		ofs << "姓名:张三" << endl;
	//5、关闭文件
		ofs.close();
}
int main() {
	test1();//执行文件


	system("pause");
	return 0;
}

读文件:

#include<iostream>
using namespace std;
#include <fstream>//包含头文件
#include <string>//使用getline需要加string的头文件

//文本文件 读文件

void test1()
{
	//1、包含头文件fstream
	//2、创建流对象
	ifstream ifs;//命名为ifs的流对象

	//3、指定打开方式,并判断是否打开成功
	ifs.open("test.txt", ios::in);//指定写文件的打开方式

	if (!ifs.is_open())//判断是否打开成功,如果不成功说明打开失败
	{
		cout << "文件打开失败" << endl;
		return;
	}
	//4、读数据
	//第一种
	//char buf[1024] = { 0 };//创建buf数组存放ifs中的数据
	//while (ifs>>buf)//通过while的循环将ifs的数据放入buf中,当ifs中没有数据时会自动停止循环
	//{
	//	cout << buf << endl;
	//}

	第二种
	//char buf[1024] = { 0 };
	//while (ifs.getline(buf, sizeof(buf)))//ifstream中自带getline的函数,输入需要储存的数组名和数组长度,可以获取数据
	//{
	//	cout << buf << endl;
	//}

	//第三种
	string buf;

	while ( getline(ifs, buf))
	{
		cout << buf << endl;
	}

	//第四种
	char c;
	while ((c = ifs.get()) != EOF)//EOF为end of file
	{
		cout << c;
	}
	//5、关闭文件
	ifs.close();
}
int main() {
	test1();//执行文件


	system("pause");
	return 0;
}

二进制写文件

#include<iostream>
using namespace std;
#include<fstream>

class person
{
public:
	char m_name[64];
	int m_age;
};

void test1()
{
	//1、包含头文件

	//2、创建流对象
	ifstream ifs;

	//3、打开文件 判断文件是否打开成功
	ifs.open("person.txt", ios::in | 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() {
	test1();


	system("pause");
	return 0;
}

二进制读文件

#include<iostream>
using namespace std;
#include<fstream>

//二进制文件  写文件
class person
{
public:
	char m_name[64];//最好使用char而不是string
	int m_age;
};

void test1()
{
	//1、包含头文件

	//2、创建流对象
	ofstream ofs("person.txt", ios::out | ios::binary);

	//3、打开文件
	//ofs.open("person.test", ios::out | ios::binary);

	//4、写文件
	person p = { "张三",18 };
	ofs.write((const char*)&p,sizeof(person));//其中的(const char*)&p意思是将p的引用转化为char类型的常量指针
	//5、关闭文件
	ofs.close();
}
int main() {
	test1();


	system("pause");
	return 0;
}

上一篇:CDR学习者必看:CDR实用技巧及常用问题合集


下一篇:5.C++文件操作