c++文件操作

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

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

c++对文件操作需包含头文件**<fstream>**

文件类型分两种

1、文本文件:文件以文本的ASCLL码形式存储在计算机中

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

操作文件的三大类

<ofstream> : 写操作

<ifstream> : 读操作

<fstream> : 读写操作

文本文件

写文件

写文件步骤如下:

1、包含头文件<fstream>

#include<fstream>

2、创建流对象

ofstream ofs;

3、打开文件

ofs.opfen("打开路径",打开方式);

4、读数据

选择读取方式

5、关闭文件

ofs.close()

注意:文件打开方式可以配合使用,利用 | 操作符

例如:用二进制写文件 ios::binary | ios::out

代码示例:

cpp 复制代码
void test01() {
	//1.包含头文件 fstream

	//2.创建流对象 ifstream 读文件 ofstream写文件 fstream读写文件
	fstream ofs;

	//3.指定打开方式   对象.open("文件路径",打开方式)
	ofs.open("test.01", ios::out);

	//4.写内容
	ofs << "古月阿刘" << endl;
	ofs << "资质:" << "甲等9成9真元" << endl;
	ofs << ""不过是些许风霜罢了"" << endl;

	//5.关闭文件
	ofs.clear();
}
int main() {
	test01();
}
查看写的文件:

右键咱们的源文件,打开所在文件夹

在源文件的附近就会出现我们打开路径的文件
记事本或者其他方式打开这个文件就可以看到写的东西了

读文件

读文件的操作和写文件很类似

读文件步骤如下:

1、包含头文件<fstream>

#include<fstream>

2、创建流对象

ifstream ifs;

3、打开文件并判断是否打开成功

ifs.opfen("打开路径",打开方式);

4、读数据

选择读取方式

5、关闭文件

ifs.close()

代码示例:

cpp 复制代码
void test01() {
	//1、包含头文件<fstream>

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

	//3、打开文件 并判断是否打开成功
	ifs.open("test.01", ios::in);
	
	if (!ifs.is_open()) {//is_open()如果成功打开则返回一个true
		cout << "文件打开失败" << endl;
			return;
	}
	//4、读数据
	string buf;
	//getline是一个全局函数
	while (getline(ifs, buf)) {
		cout << buf << endl;
	}
	//5、关闭文件
	ifs.close();
}
int main()
{
	test01();
}

操作完毕要关闭文件

二进制文件

以二进制的方式操作文件

打开方式指定ios::binary

写文件

二进制写文件主要通过流对象调用成员函数write

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

参数解释:字符指针buffer指向一块内存空间进行写的开始,len表示写的字节数

示例:

cpp 复制代码
//二进制文件(除用内置数据类型外,还可用自定义数据类型)
class person {
public:

	char m_Name[64];//不用string,因为底层逻辑是C语言
	int m_Age;
};
void test01() {
	//1、包含头文件
	//2、创建流对象
	ofstream ofs("person.txt", ios::out | ios::binary);//存在构造函数

	//3、打开文件(二进制方式)
	//ofs.open("person.txt", ios::out | ios::binary);
	//4、写内容
	person per = { "xiaoliu", 19 };
	ofs.write((const char*)&per, sizeof(person));
	//5、关闭文件
	ofs.close();
}
int main()
{
	test01();
}

查看写的文件与文本文件的查看一致, 但我们不能直接看懂它,因为是二进制的方式写入。

总结:文件输出流对象,通过函数write,以二进制方式写数据

读文件

二进制读文件主要通过流对象调用成员函数read

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

参数解释:字符指针buffer指向一块内存空间进行读的开始,len表示读的字节数

示例:

cpp 复制代码
class person {
public:

	char m_Name[64];//不用string,因为底层逻辑是C语言
	int m_Age;
};
void test01() {
	//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()
{
	test01();
}
相关推荐
hjjdebug30 分钟前
ffplay6 播放器关键技术点分析 1/2
c++·ffmpeg·音视频
铲子Zzz1 小时前
Java使用接口AES进行加密+微信小程序接收解密
java·开发语言·微信小程序
小小小新人121231 小时前
C语言 ATM (4)
c语言·开发语言·算法
Two_brushes.1 小时前
【linux网络】网络编程全流程详解:从套接字基础到 UDP/TCP 通信实战
linux·开发语言·网络·tcp/udp
小白学大数据1 小时前
R语言爬虫实战:如何爬取分页链接并批量保存
开发语言·爬虫·信息可视化·r语言
争不过朝夕,又念着往昔1 小时前
Go语言反射机制详解
开发语言·后端·golang
Azxcc02 小时前
C++异步编程入门
开发语言·c++
吐泡泡_2 小时前
C++(STL源码刨析/vector)
c++
你的冰西瓜2 小时前
C++排序算法全解析(加强版)
c++·算法·排序算法
Biaobiaone2 小时前
Java中的生产消费模型解析
java·开发语言