10. 文件的读写

10.1 文本文件

操作文件三大类:

  • ofstream:写操作
  • ifstream:读操作
  • fstream:读写操作
打开方式 解释
ios::in 为了读文件而打开文件
ios::out 为了写文件而打开文件,如果当前文件存在则清空当前文件在写入
ios::app 追加方式写文件
ios::trunc 如果文件存在先删除,在创建
ios::ate 打开文件之后令读写位置移至文件尾端
ios::binary 二进制方式

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

例如:利用二进制方式写文件,ios::binary|ios::out

10.1.1 写文件

  • 普通写文件
cpp 复制代码
#include<fstream> // 文件头
ofstream ofs;// 创建流对象
ofs.open("path",打开方式);
ofs<<"写入数据"<<endl;
ofs.close();// 关闭文件
  • 二进制写文件
cpp 复制代码
#include<fstream> // 文件头
ofstream ofs;// 创建流对象
ofs.open("path",ios::out|ios::binary);
Person p={"张三",18};
ofs.write((const char *)&p,sizeof(Person));//Person 自定义类
ofs.close();// 关闭文件

10.1.2 读文件

  • 普通读文件
cpp 复制代码
#include<fstream> // 文件头
ifstream ifs;// 创建流对象
ifs.open("path",打开方式);
if(!ifs.open()){
	cout<<文件打开失败!<<endl;
	return
}
// 四种读取方法
// 第一种方法
//char buf[1024]={0};
//while(ifs>>buf){
	//cout<<buf<<endl;
//}
// 第二种方法
//char buf[1024]={0};
//while(ifs.getline(buf,size(buf))){
	//cout<<buf<<endl;
//}
// 第三种方法
//string buf;
//while(getline(ifsbuf){
	//cout<<buf<<endl;
//}

// 第四种方法,比较少用
//char c;
//while((c=ifs.get())!EOF){
	//cout<<c<<endl;
//}
ifs.close()
  • 二进制读文件
cpp 复制代码
#include<fstream> // 文件头
ofstream ofs;// 创建流对象
ofs.open("path",ios::int|ios::binary);
Person p={"张三",18};
if(!ifs.open()){
	cout<<文件打开失败!<<endl;
	return
}
ofs.read((const char *)&p,sizeof(Person));//Person 自定义类
cout<<p.name<<":"<<p.age<<endl;
ofs.close();// 关闭文件
相关推荐
xlp666hub6 小时前
Leetcode第七题:用C++解决接雨水问题
c++·leetcode
肆忆_8 小时前
实战复盘:手写 C++ 虚拟机的高性能并行 GC (Thread Pool + Work Stealing)
c++
肆忆_8 小时前
虚函数进阶答疑:把上一篇博客评论区里最容易卡住的问题,一次追到底
c++
saltymilk1 天前
使用 C++ 模拟 ShaderLanguage 的 swizzle
c++·模板元编程
xlp666hub1 天前
Leetcode第五题:用C++解决盛最多水的容器问题
linux·c++·leetcode
得物技术1 天前
搜索 C++ 引擎回归能力建设:从自测到工程化准出|得物技术
c++·后端·测试
xlp666hub2 天前
Leetcode 第三题:用C++解决最长连续序列
c++·leetcode
会员源码网2 天前
构造函数抛出异常:C++对象部分初始化的陷阱与应对策略
c++
xlp666hub2 天前
Leetcode第二题:用 C++ 解决字母异位词分组
c++·leetcode
不想写代码的星星2 天前
static 关键字:从 C 到 C++,一篇文章彻底搞懂它的“七十二变”
c++