C++ 基础【16】

本文代码仓库地址: gitee码云CSDN笔记仓库地址



以文本(txt)的方式进行读写文件【FileOperations01_xy】

// 文件操作 -- 以文本(txt)的方式进行读写文件
/*
* 操作文件需要包含头文件<fstream>
* f--file 文件、stream--流
* 
* 操作文件的三大类:
* 1、ofstream:写文件 -- o:out 从程序里面出去,就是写到文件里面
* 2、ifstream:读文件 -- i:in 从外部进来程序,就是读
* 3、fstream:读和写文件 -- 没有标明是in还是out所以读和写都可以
* 
* 写文件操作步骤:
* 1、创建流对象:ofstream ofs;
* 2、打开文件:ofs.open("文件路径", 打开方式);
* 3、写数据:ofs << "写入数据";
* 4、关闭文件:ofs.close();(手动操作,有开有关,养好习惯)
* 
* 打开方式:
* ios::in -- 为读文件而打开的方式
* ios::out -- 为写文件而打开的方式【会覆盖原来文本中的内容】
* ios::ate -- 初始位置:文件尾
* ios::app -- 追加方式写文件【追加在的方式添加最文件内容的后面】
* ios::trunc -- 如果文件存在先将其删除,在创建
* ios::binary -- 二进制方式
* 
* 读文件操作步骤:
* 1、创建流对象:ifstream ifs;
* 2、打开文件并判断文件是否打开成功:ifs.open("文件路径", 打开方式);
* 3、读数据:三种读取方式
* 4、关闭文件:ifs.close();(手动操作,有开有关,养好习惯)
*/
#include <iostream>
// 包含文件流的头文件
#include <fstream>

using namespace std;


// 验证 以文本(txt)的方式写文件
void fun01() {
	ofstream ofs01;
	// 默认情况下,文件不存在会新创建,不填具体路径默认路径是与项目在同一目录下
	ofs01.open("01.txt", ios::out);
	// 写入内容
	ofs01 << "姓名:小印01" << endl;
	ofs01 << "年龄:22" << endl;
	ofs01 << "性别:男" << endl;
	// 写完后关闭文件
	ofs01.close();
}

// 验证 以文本(txt)的方式读文件
void fun02() {
	ifstream ifs01;
	ifs01.open("01.txt", ios::in);
	// 判断打开文件是否成功
	if (!ifs01.is_open())
	{
		cout << "文件打开失败!!!" << endl;
		return;
	}
	// 读取数据 方法一:
	// 创建一个字符数组,准备把文件中的数据全部放在数组中
	char mChar01[1024] = { 0 };
	// 判断文件中的数据放进数组中,文件中的数据全部读完后,再次循环去读就会返回false
	while (ifs01 >> mChar01)
	{
		cout << mChar01 << endl;
	}
	ifs01.close();

	cout << endl;
	ifstream ifs02;
	ifs02.open("01.txt", ios::in);
	// 判断打开文件是否成功
	if (!ifs02.is_open())
	{
		cout << "文件打开失败!!!" << endl;
		return;
	}
	// 读取数据 方法二:
	// 创建一个字符数组,准备把文件中的数据全部放在数组中
	char mChar02[1024] = { 0 };
	// 获取一行,参数1--获取行的地址,参数2--获取长度
	while (ifs02.getline(mChar02, sizeof(mChar02)))
	{
		// 每次读取一行
		cout << mChar02 << endl;
	}
	ifs02.close();

	cout << endl;
	ifstream ifs03;
	ifs03.open("01.txt", ios::in);
	// 判断打开文件是否成功
	if (!ifs03.is_open())
	{
		cout << "文件打开失败!!!" << endl;
		return;
	}
	// 读取数据 方法三:
	char c03;
	// 判断获取的自读是不是文件的末尾,EOF:E--end、O--of、F--File 文件末尾
	while ((c03 = ifs03.get()) != EOF)
	{
		// 每次读取一个字符,不要进行换行,不然中文的鬼都不认识
		cout << c03;
	}
	ifs03.close();
}


int main() {

	fun01();
	cout << "------------------分界线------------------" << endl;
	fun02();

	cout << endl;
	system("pause");
	return 0;
}

以二进制的方式进行读写文件【FileOperations02_xy】

// 文件操作 -- 以二进制的方式进行读写文件
/*
* 打开方式要指定为:ios::binary
* 
* 注意:文件打开方式可以配合使用,利用 | 操作符
* 示例:用二进制方式写文件 ios::binary | ios::out
* 
* 二进制方式读文件主要利用流对象调用成员函数read
* 函数原型:istream& read(char* buffer, int len);
* 参数解释:参数1--字符指针buffer指向内存中一段存储空间、参数2--len是读写的字节数
* 
* 以二进制的方式进行读写文件尽量不要涉及到string类型的,可能会出问题,具体的我也不知道啦
*/
#include <iostream>
#include <fstream>

using namespace std;


class person_xy {
public:
	char mName[64] = { 0 };
	int mAge = 0;
};

// 验证 以二进制的方式写文件
void fun01() {
	ofstream ofs;
	// ofstream 也有有参的构造函数,可以把下面打开的步骤在实例化对象的时候就打开
	// ofstream ofs("02.txt", ios::binary | ios::out);
	ofs.open("01.txt", ios::binary | ios::out);
	// 赋值
	person_xy mp01 = { "小印01", 22 };
	// 写入内容 参数1--需要的类型是const char*所以需要给强转、参数2--写的长度
	ofs.write((const char*)&mp01, sizeof(mp01));
	// 写完后关闭文件
	ofs.close();
}

// 验证 以二进制的方式读文件
void fun02() {
	ifstream ifs;
	ifs.open("01.txt", ios::in | ios::binary);
	if (!ifs.is_open())
	{
		cout << "文件打开失败!!!" << endl;
		return;
	}
	person_xy mp;
	// 打印读文件前的姓名和年龄
	cout << "姓名:" << mp.mName << "\t 年龄:" << mp.mAge << endl;
	// 读文件 怎么写进去的就怎么给读出来:参数1--需要char* 的类型,把接收的类型强转、参数2--读取的字符长度
	ifs.read((char*)&mp, sizeof(ifs));
	// 打印读文件后的姓名和年龄
	cout << "姓名:" << mp.mName << "\t 年龄:" << mp.mAge << endl;
	// 读完后关闭文件
	ifs.close();
}


int main() {

	fun01();
	cout << "------------------分界线------------------" << endl;
	fun02();

	cout << endl;
	system("pause");
	return 0;
}

一点点笔记,以便以后翻阅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小印丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值