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接口的二次封装,提供了更友好的操作方式。

相关推荐
神仙别闹29 分钟前
基于 C# OpenPGP 的文件管理系统
开发语言·c#
汉克老师30 分钟前
GESP6级C++考试语法知识(四、图与树(四))
c++·贪心算法·优先队列·哈夫曼编码·哈夫曼树·gesp6级·gesp六级
番石榴AI44 分钟前
纯 CPU 推理!0.1B 超轻量级端到端OCR模型,使用 Java 进行文档解析
java·开发语言·ocr
likerhood1 小时前
ConcurrentHashMap详细讲解(java)
java·开发语言·性能优化
机器学习之心1 小时前
集成BWM法、熵权法、改进博弈论组合赋权与三角直觉模糊云模型的多属性评价模型,MATLAB代码
开发语言·matlab·熵权法·三角直觉模糊云模型·bwm法·改进博弈论组合赋权·多属性评价模型
子兮曰1 小时前
whisper.cpp 深度解析:从边缘设备到实时语音识别
前端·c++·后端
特种加菲猫1 小时前
二叉搜索树:数据世界的“快速寻路指南”
开发语言·c++
naturerun2 小时前
从数组中删除元素的算法
数据结构·c++·算法
特种加菲猫2 小时前
STL关联容器:Set/Multiset与Map/Multimap详解
开发语言·c++
我滴老baby2 小时前
0基础速通Python+AI|2026热门轻量化玩法全攻略:从入门到实战,3天搞定AI应用开发
开发语言·人工智能·python