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

相关推荐
未来可期LJ34 分钟前
【C++ 设计模式】单例模式的两种懒汉式和饿汉式
c++·单例模式·设计模式
Trouvaille ~1 小时前
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
c++·c++20·编译原理·编译器·类和对象·rvo·nrvo
little redcap1 小时前
第十九次CCF计算机软件能力认证-乔乔和牛牛逛超市
数据结构·c++·算法
AI原吾2 小时前
掌握Python-uinput:打造你的输入设备控制大师
开发语言·python·apython-uinput
机器视觉知识推荐、就业指导2 小时前
Qt/C++事件过滤器与控件响应重写的使用、场景的不同
开发语言·数据库·c++·qt
毕设木哥2 小时前
25届计算机专业毕设选题推荐-基于python的二手电子设备交易平台【源码+文档+讲解】
开发语言·python·计算机·django·毕业设计·课程设计·毕设
珞瑜·2 小时前
Matlab R2024B软件安装教程
开发语言·matlab
weixin_455446172 小时前
Python学习的主要知识框架
开发语言·python·学习
孤寂大仙v2 小时前
【C++】STL----list常见用法
开发语言·c++·list
她似晚风般温柔7893 小时前
Uniapp + Vue3 + Vite +Uview + Pinia 分商家实现购物车功能(最新附源码保姆级)
开发语言·javascript·uni-app