23_文件操作

文件操作

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

通过文件可以将数据持久化

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

文件类型分为两种:

​ 1.文本文件 -文件以文本的ASCII码形式存储在计算机中

​ 2.二进制文件-文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们

操作文件的三大类:

​ 1. ofstream: 写操作

​ 2.ifstream: 读操作

​ 3.fstream:读写操作

写文件

image-20231015221234988

image-20231015221259881

image-20231015221357595

#include<iostream>
#include<fstream>

using namespace std;

int main()
{
	ofstream ofs;
	ofs.open("test.txt", ios::out);

	ofs << "姓名: 张三" << endl;
	ofs << "性别: 男" << endl;
	ofs << "年龄: 19" << endl;

	ofs.close();

	return 0;
}

读文件

image-20231015222953616

#include<iostream>
#include<fstream>
#include <string>

using namespace std;

int main()
{
	ifstream ifs;

	ifs.open("test.txt", ios::in);

	if (!ifs.is_open())
	{
		cout << "文件打开失败!" << endl;
		return 0;
	}

	//读数据
	//第一种 
	/*char buf[1024] = { 0 };
	while (ifs >> buf)
	{
		cout << buf << endl;
	}*/

	//第二种 逐行读
	/*char buf[1024] = { 0 };
	while (ifs.getline(buf, sizeof(buf)))
	{
		cout << buf << endl;
	}*/

	//第三种 全部读
	/*string buf;
	while (getline(ifs, buf))
	{
		cout << buf << endl;
	}*/

	//第四种 逐个字符读
	char c;
	while ((c = ifs.get()) != EOF) //EOF 文件尾部
	{
		cout << c;
	}

	ifs.close();

	return 0;
}

二进制文件

以二进制的方式对文件进行读写操作

打开方式要指定为ios::binary

写文件

二进制方式写文件主要利用流对象调用成员函数write

函数原型: ostream& write(const char * buffer,int len);

参数解释: 字符指针buffer指向内存中一段存储空间。len是读写的字节数

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

class Person
{
public:
	char m_Name[64];
	int m_Age; 
};

int main()
{
	ofstream ofs("person.txt", ios::out | ios::binary); //二进制方式写文件
	//ofs.open("person.txt", ios::out | ios::binary);
	Person p = { "张三", 18 };
	ofs.write((const char*)&p, sizeof(Person));
	ofs.close();
	return 0;
}

读文件

二进制方式读文件主要利用流对象调用成员函数read

函数原型: istream& read(char *buffer,int len);

参数解释: 字符指针buffer指向内存中一段存储空间。len是读写的字节数

#include <iostream>
#include<fstream>

using namespace std;

class Person
{
public:
	char mName[64];
	int mAge;
};

int main()
{
	ifstream ifs("person.txt", ios::in | ios::binary);
	if (!ifs.is_open())
	{
		cout << "打开文件失败" << endl;
		return 0;
	}
	Person p;
	ifs.read((char*)&p, sizeof(Person));

	cout << p.mName << ", " << p.mAge << endl;
	ifs.close();
	return 0;
}
posted @ 2023-10-16 12:08  爱吃冰激凌的黄某某  阅读(5)  评论(0编辑  收藏  举报