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();
}
相关推荐
脉动数据行情5 分钟前
Python 实现融通金行情数据对接(实时推送 + K 线 + 产品列表)
开发语言·python
khalil102030 分钟前
代码随想录算法训练营Day-46 动态规划13 | 647. 回文子串、516.最长回文子序列、动态规划总结
数据结构·c++·算法·leetcode·动态规划·回文子串·回文子序列
挨踢ren40 分钟前
单例模式:C++实现与多线程安全
c++·设计模式
skywalk816342 分钟前
Trae生成的中文编程语言关键字(如“定“、“函“、“印“等)需要和标识符之间用 空格 隔开,以确保正确识别
服务器·开发语言·编程
用户805533698031 小时前
现代Qt开发教程(新手篇)1.14——日志
c++·qt
红色的小鳄鱼1 小时前
前端面试js手写
开发语言·前端·javascript
海盗12341 小时前
C#中的IEqualityComparer<T>使用
开发语言·c#
江公望1 小时前
Qt QSharedPointer用法,10分钟讲清楚
开发语言·qt
月落归舟1 小时前
深入理解Java适配器模式,彻底搞懂设计思想
java·开发语言·适配器模式
Mr_pyx1 小时前
【LeetHOT100】二叉树的中序遍历——Java多解法详解
java·开发语言·深度优先