20240422,C++文件操作

停电一天之后,今天还有什么理由不学习呜呜......还是没怎么学习

目录

一,文件操作

[1.1 文本文件](#1.1 文本文件)

[1.1.1 写文件](#1.1.1 写文件)

[1.1.2 读文件](#1.1.2 读文件)

[1.2 二进制文件](#1.2 二进制文件)

[1.2.1 写文件](#1.2.1 写文件)

[1.2.2 读文件](#1.2.2 读文件)

一,文件操作

文件操作可以将数据持久化,对文件操作时须包含头文件**<fstream>**

两种文件类型:文本文件: 文件以文本的ASCII码形式存储;二进制文件: 文件以文本的二进制形式存储

操作文件三大类:ofstream 写操作;ifsream读操作, fstream读写操作

1.1 文本文件
1.1.1 写文件

包含头文件:#include <fstream> ------创建流对象**:ofs.open("文件路径",打开方式)** ;------写数据:ofs<<"写入的数据">> ;------关闭文件:ofs.close();
打开方式 :
ios::in 为读文件而打开文件
ios::out 为写文件而打开文件
ios::ate 初始位置:文件尾
ios::app 追加方式写文件
ios::trunc 如果文件存在先删除,再创建
ios::binary 二进制方式

注意:| 操作符,配合使用文件打开方式,IOS::BINARY | IOS::OUT------用二进制方式写文件;未指定完整文件夹路径,默认和源文件一起?

#include <iostream>
#include <fstream>
using namespace std;

void test01() {
	//创建流对象
	ofstream ofs;
	//指定打开方式    "文件路径",打开方式
	ofs.open("test.txt", ios::out);
	//写内容
	ofs << "姓名 :张三" << endl;
	ofs << "性别:男" << endl;
	ofs << "年龄:18" << endl;
	//关文件
	ofs.close();
}
int main() {
	test01();
	system("pause");
	return 0;
}
1.1.2 读文件

包含头文件:#include <fstream> ------创建流对象:ifstream ifs ------打开并判断文件是否打开成功ifs .open ("文件路径",打开方式) ------读数据【四种方式读取】------关闭文件ifs.close();

字符数组while (ifs >> buff) 字符数组while (ifs.getline(buff2, sizeof(buff2)))
字符串【这里不可以省略<string>】while (getline (ifs,buff3)) 单个字符while ((c = ifs.get()) != EOF)

#include <iostream>
#include<string>
#include <fstream>
using namespace std;

void test01() {
	ifstream ifs;
	ifs.open("test.txt", ios::in);
	if (!ifs.is_open()) {     //is_open(),bool类型,!取反
		cout << "文件打开失败" << endl;
		return;   //失败不继续进行
	}
	//读数据   第一种   输出上比其他多了一个换行符,不懂
	char buff[1024] = { 0 };//字符数组
	while (ifs >> buff) {    //文件写入BUFF,没有数据的时候循环结束
		cout << buff << endl;
	}
	
	//第二种
	//char buff2[1024] = { 0 };
	//while (ifs.getline(buff2, sizeof(buff2))) {//GETLINE获取一行,char*,首地址,count最多读几个字节数【数组大小】
	//	cout << buff2 << endl;
	//}//都不注释也只输出一次,不懂
	
	//第三种
	//string buff3;
	基础的输入流,GETLINE基础的输入流,需要输入流对象IFS,准备好的字符串
	//while (getline (ifs,buff3)) {   //未定义标识符getline?不懂
	//	cout << buff3 << endl;
	//}//失败------加上<string>头文件

	//第四种,C,不常用,效率低
	/*char c;
	while ((c = ifs.get()) != EOF) {
		cout << c;
	}*/

	ifs.close();
}
int main() {
	test01();
	system("pause");
	return 0;
}
1.2 二进制文件

打开要指定为ios::binary

1.2.1 写文件

二进制写文件主要利用流对象调用成员函数WRITE ,函数原型:ostream& write ( const char* buffer,int len) ;解释:字符指针buffer指向内存中的一段存储空间,len是读写的字节数

二进制读入的文件会乱码,只要正确读入就不影响

#include <iostream>
#include<string>
#include <fstream>
using namespace std;
class Person {
public:
	char m_Name[64];//尽量用C的字符数组,STRING容易出现问题
	int m_Age;
};

void test01() {
	ofstream ofs;
	//打开头文件
	ofs.open("person.txt", ios::out | ios::binary);
	Person p = { "王五",78 };
	//对P取地址返回Person性质的地址,强制转换成CHAR*
	ofs.write((const char*)&p, sizeof(Person));
	ofs.close();
}
int main() {
	test01();
	system("pause");
	return 0;
}
1.2.2 读文件

二进制读文件主要利用流对象调用成员函数READ ,函数原型:istream& read ( const char* buffer,int len);解释:字符指针buffer指向内存中的一段存储空间,len是读写的字节数

#include <iostream>
#include<string>
#include <fstream>
using namespace std;
class Person {
public:
	char m_Name[64];//尽量用C的字符数组,STRING容易出现问题
	int m_Age;
};

void test01() {
	ifstream ofs;
	//打开头文件
	ofs.open("person.txt", ios::in | ios::binary);
	if (!ofs.is_open()) {
		cout << "打开失败" << endl;
		return;
	}
	//读文件
	Person p;
	ofs.read((char*)&p, sizeof(Person));
	//输出数据
	cout << "姓名:" << p.m_Name << "\t年龄:" <<p.m_Age<< endl;
	ofs.close();
}
int main() {
	test01();
	system("pause");
	return 0;
}
相关推荐
mazo_command几秒前
【MATLAB课设五子棋教程】(附源码)
开发语言·matlab
IT猿手4 分钟前
多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
开发语言·人工智能·算法·机器学习·matlab
青春男大4 分钟前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse
88号技师4 分钟前
几款性能优秀的差分进化算法DE(SaDE、JADE,SHADE,LSHADE、LSHADE_SPACMA、LSHADE_EpSin)-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
Zer0_on7 分钟前
数据结构栈和队列
c语言·开发语言·数据结构
一只小bit8 分钟前
数据结构之栈,队列,树
c语言·开发语言·数据结构·c++
一个没有本领的人1 小时前
win11+matlab2021a配置C-COT
c语言·开发语言·matlab·目标跟踪
一只自律的鸡1 小时前
C项目 天天酷跑(下篇)
c语言·开发语言
源码哥_博纳软云1 小时前
JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码
java·开发语言·微信小程序·小程序·微信公众平台
沐泽Mu1 小时前
嵌入式学习-QT-Day05
开发语言·c++·qt·学习