C++文件操作

C++文件操作

文件操作

文件操作是学习编程语言的基础内容。

通过文件操作可以将数据持久化到磁盘,C++对文件操作可以包含头文件<fstream>。

文件的分类

  • 文本文件:可以理解为字符串内容(明文),通过文本编辑器可以展示其内容。(如普通的txt文件)
  • 二进制文件:可以理解为非字符串内容,文本编辑器打开后基本为乱码。(如下载的安装文件exe等)

操作文件的三大类

  • ofstream : 写操作
  • ifstream : 读操作
  • fstream : 读写操作

文件的打开方式

打开方式 解释
ios::in 读文件
ios::out 写文件
ios::ate 初始位置:文件尾
ios::app 追加(初始位置文件尾并且是写模式)
ios::trunc 文件存在先删除,再创建
ios::binary 二进制方式

如果需要多种模式配合使用,可以使用 | 操作符

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

写文件

cpp 复制代码
void writeFile() {
	//创建流对象
	ofstream ofs;
	//本身类就是输出流,还需要指定写模式
	ofs.open("test.txt", ios::out);
	ofs << "写文件好简单!" << endl;
	ofs << "END" << endl;
	//使用完需要关闭
	ofs.close();
}

读文件

cpp 复制代码
void readFile() {
	//创建流对象
	ifstream ifs;
	//打开文件
	ifs.open("test.txt", ios::in);
	//文件是否打开成功
	if(ifs.is_open()){
		//读文件 四种方式(四种方法只能选择其中一种,然后注释掉其它三种)
		//第一种
		char buffer[1024] = {0};
		while(ifs >> buffer){
			cout << buffer << endl;
		}
		//第二种
		char buffer[1024] = {0};
		while(ifs.getLine(buffer, sizeof(buffer) {
			cout << buffer << endl;
		}
		//第三种
		string str;
		while(getLine(ifs, str)){
			cout << str << endl;
		}
		//第四种(不推荐)
		char c;
		//EOF(end of file)文件尾,其实就是空
		while((c = ifs.get()) != EOF) {
			cout << c;
		}
		关闭流
		ifs.close();
	}
}

二进制文件

二进制读写文件,不仅仅可以操作内置的数据类型,甚至可以操作自定义的数据类型。

写文件

cpp 复制代码
//自定义数据类型Person
class Person {
public:
	char name[64];
	int age;
}

void writeFile() {
	//创建流对象
	ofstream ofs;
	//二进制的方式打开文件
	ofs.open("person.txt", ios::out | ios::binary);
	//可以直接创建流对象的同时打开文件
	//ofstream ofs("person.txt", ios::out | ios::binary);
	//写文件
	Person person = { "张三" , 22};
	ofs.write((const char*)&person, sizeof(person));
	//关闭文件
	ofs.close();
}

写对象二进制的方式,通过文本文件打开,会发现乱码现象。

读文件

cpp 复制代码
void readFile() {
	//创建流对象
	ifstream ifs;
	//打开文件
	ifs.open("test.txt", ios::in | ios::binary);
	//文件是否打开成功
	if(ifs.is_open()){
		//读文件
		Person person;
		ifs.read((char *) &person, sizeof(person));
		//关闭文件
		ifs.close();
		
	}
}

这一章只是对文件操作的一节实践课,C++文件操作fstream仅是对libc中posix接口的二次封装,提供了更友好的操作方式。

相关推荐
码匠许师傅6 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
2603_965148116 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
小小龙学IT8 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
知无不研9 小时前
lambda表达式的使用(3)
开发语言·c++·lambda
cfm_29149 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
C++ 老炮儿的技术栈11 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
qq_4480111611 小时前
C语言中的柔性数组
c语言·开发语言·柔性数组
小白学大数据11 小时前
长周期爬虫的数据一致性:断点续爬 + 事务回滚保障采集质量
开发语言·爬虫·测试工具
zlinear数据采集卡11 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
Poo_Chai12 小时前
QT emit信号后完整处理流程,包括槽函数响应流程
java·开发语言·数据库