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

相关推荐
香精煎鱼香翅捞饭15 分钟前
java通用自研接口限流组件
java·开发语言
-凌凌漆-24 分钟前
【C#】async与await介绍
开发语言·c#
小猿_0034 分钟前
C语言单链表头插法
c语言·开发语言
Hello.Reader44 分钟前
在 Rust 中实现面向对象的状态模式
开发语言·rust·状态模式
JouJz1 小时前
Java虚拟机之垃圾收集(一)
java·开发语言·jvm
五行星辰1 小时前
Java链接redis
java·开发语言·redis
邪恶的贝利亚1 小时前
C++之序列容器(vector,list,dueqe)
开发语言·c++
原来是猿1 小时前
蓝桥备赛(13)- 链表和 list(上)
开发语言·数据结构·c++·算法·链表·list
异常驯兽师1 小时前
Java集合框架深度解析:List、Set与Map的核心区别与应用指南
java·开发语言·list
成功助力英语中国话1 小时前
SDK编程,MFC编程,WTL编程之间的关系
c++·mfc