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

相关推荐
blasit13 小时前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
肆忆_2 天前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星2 天前
虚函数表:C++ 多态背后的那个男人
c++
端平入洛4 天前
delete又未完全delete
c++
端平入洛5 天前
auto有时不auto
c++
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1235 天前
matlab画图工具
开发语言·matlab
dustcell.5 天前
haproxy七层代理
java·开发语言·前端
norlan_jame5 天前
C-PHY与D-PHY差异
c语言·开发语言
哇哈哈20215 天前
信号量和信号
linux·c++