c++文件操作

程序运行时产生的数据都属于临时数据,运行结束后都会被释放

通过文件可以将数据持久化

c++对文件操作需包含头文件**<fstream>**

文件类型分两种

1、文本文件:文件以文本的ASCLL码形式存储在计算机中

2、二进制文件:文件以二进制 的形式存储在计算机中,用户一般不能直接读懂它们

操作文件的三大类

<ofstream> : 写操作

<ifstream> : 读操作

<fstream> : 读写操作

文本文件

写文件

写文件步骤如下:

1、包含头文件<fstream>

#include<fstream>

2、创建流对象

ofstream ofs;

3、打开文件

ofs.opfen("打开路径",打开方式);

4、读数据

选择读取方式

5、关闭文件

ofs.close()

注意:文件打开方式可以配合使用,利用 | 操作符

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

代码示例:

cpp 复制代码
void test01() {
	//1.包含头文件 fstream

	//2.创建流对象 ifstream 读文件 ofstream写文件 fstream读写文件
	fstream ofs;

	//3.指定打开方式   对象.open("文件路径",打开方式)
	ofs.open("test.01", ios::out);

	//4.写内容
	ofs << "古月阿刘" << endl;
	ofs << "资质:" << "甲等9成9真元" << endl;
	ofs << ""不过是些许风霜罢了"" << endl;

	//5.关闭文件
	ofs.clear();
}
int main() {
	test01();
}
查看写的文件:

右键咱们的源文件,打开所在文件夹

在源文件的附近就会出现我们打开路径的文件
记事本或者其他方式打开这个文件就可以看到写的东西了

读文件

读文件的操作和写文件很类似

读文件步骤如下:

1、包含头文件<fstream>

#include<fstream>

2、创建流对象

ifstream ifs;

3、打开文件并判断是否打开成功

ifs.opfen("打开路径",打开方式);

4、读数据

选择读取方式

5、关闭文件

ifs.close()

代码示例:

cpp 复制代码
void test01() {
	//1、包含头文件<fstream>

	//2、创建流对象
	ifstream ifs;

	//3、打开文件 并判断是否打开成功
	ifs.open("test.01", ios::in);
	
	if (!ifs.is_open()) {//is_open()如果成功打开则返回一个true
		cout << "文件打开失败" << endl;
			return;
	}
	//4、读数据
	string buf;
	//getline是一个全局函数
	while (getline(ifs, buf)) {
		cout << buf << endl;
	}
	//5、关闭文件
	ifs.close();
}
int main()
{
	test01();
}

操作完毕要关闭文件

二进制文件

以二进制的方式操作文件

打开方式指定ios::binary

写文件

二进制写文件主要通过流对象调用成员函数write

函数原型:ostream& write(const char * buffer , int len);

参数解释:字符指针buffer指向一块内存空间进行写的开始,len表示写的字节数

示例:

cpp 复制代码
//二进制文件(除用内置数据类型外,还可用自定义数据类型)
class person {
public:

	char m_Name[64];//不用string,因为底层逻辑是C语言
	int m_Age;
};
void test01() {
	//1、包含头文件
	//2、创建流对象
	ofstream ofs("person.txt", ios::out | ios::binary);//存在构造函数

	//3、打开文件(二进制方式)
	//ofs.open("person.txt", ios::out | ios::binary);
	//4、写内容
	person per = { "xiaoliu", 19 };
	ofs.write((const char*)&per, sizeof(person));
	//5、关闭文件
	ofs.close();
}
int main()
{
	test01();
}

查看写的文件与文本文件的查看一致, 但我们不能直接看懂它,因为是二进制的方式写入。

总结:文件输出流对象,通过函数write,以二进制方式写数据

读文件

二进制读文件主要通过流对象调用成员函数read

函数原型:istream& read(char * buffer , int len);

参数解释:字符指针buffer指向一块内存空间进行读的开始,len表示读的字节数

示例:

cpp 复制代码
class person {
public:

	char m_Name[64];//不用string,因为底层逻辑是C语言
	int m_Age;
};
void test01() {
	//1、包含头文件
	//2、创建流对象
	ifstream ifs;

	//3、打开文件 判断是否打开成功
	ifs.open("person.txt", ios::in | ios::binary);
	if (!ifs.is_open()) {
		cout << "文件打开失败" << endl;
		return;
	}
	//4、读数据
	person p;
	ifs.read((char*)&p, sizeof(person));
	cout << "姓名:" << p.m_Name << " " << "年龄:" << p.m_Age << endl;
	//5、关闭文件
	ifs.close();
}
int main()
{
	test01();
}
相关推荐
乌萨奇也要立志学C++4 分钟前
【C++详解】STL-list模拟实现(深度剖析list迭代器,类模板未实例化取嵌套类型问题)
c++·list
presenttttt13 分钟前
用Python和OpenCV从零搭建一个完整的双目视觉系统(四)
开发语言·python·opencv·计算机视觉
每日出拳老爷子19 分钟前
[C#] 使用TextBox换行失败的原因与解决方案:换用RichTextBox的实战经验
开发语言·c#
半桔23 分钟前
【Linux手册】从接口到管理:Linux文件系统的核心操作指南
android·java·linux·开发语言·面试·系统架构
闻缺陷则喜何志丹23 分钟前
【前缀和 BFS 并集查找】P3127 [USACO15OPEN] Trapped in the Haybales G|省选-
数据结构·c++·前缀和·宽度优先·洛谷·并集查找
nightunderblackcat31 分钟前
新手向:实现ATM模拟系统
java·开发语言·spring boot·spring cloud·tomcat·maven·intellij-idea
开开心心就好34 分钟前
电脑息屏工具,一键黑屏超方便
开发语言·javascript·电脑·scala·erlang·perl
笑衬人心。42 分钟前
Java 17 新特性笔记
java·开发语言·笔记
序属秋秋秋2 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
ruan1145143 小时前
MySQL4种隔离级别
java·开发语言·mysql