当前位置: 首页 > article >正文

C++ 文件I/O流

C++文件的I/O流
一、c++对文本文件的读写
a.创建流对象,通过流对象打开文件
ofstream ofs(const char* filename,openmode mode);
b.通过成员函数方式,打开文件
void open(const char* filename);
void open(const char* filename,openmode mode);
filename :文件的路径
mode :打开方式
    ios::app 添加输出
    ios::ate 当已打开时寻找到EOF
    ios::binary 以二进制模式打开文件
    iOS::in 为读取打开文件
    ios::out 为写入打开文件
    ios::trunc 覆盖存在的文件
    
ifstream类,默认以只读方式O_RDONLY打开文件,文件不存在则失败"r"
ifstream类,默认以只写方式O_RDONLY|O_CREAT|O_TRUNC打开文件,文件不存在则创建、存在则清空"w"
fstream类,默认以读写方式O_RDWR打开文件,文件不存在则失败,文件存在不清空"r+"
    
 注意:ios::里面打开模式单独使用和混合使用时候有些功能会有所删减变化,不是简单的功能相加,具体底层调用哪个打开模式可以通过strace ./a.out 来追踪底层对系统函数的调用
二、如何判断文件是否打开成功
a、通过!流对象名 执行了该类的!运算符重载版本
    if(!ifs) //为真,则文件打开失败
b、通过good\fail成员函数判断是否打开成功
    bool good();
    功能:判断上一次流是否成功,成功返回真,一般用于判断文件是否打开成功
三、读写文件

流对象 << 写操作

流对象 >> 读操作

对类对象操作符<< >>进行重载

class Student
{
	string name;
	int age;
	char sex;
	float score;
public:
    Student(const string& name,int age,char sex,float score):name(name),age(age),sex(sex),score(score){}	
	const string& getName(void) const
	{
		return name;
	}
	const int getAge(void) const
	{
		return age;
	}	
	const char getSex(void) const
	{
		return sex;
	}
	const float getScore(void) const
	{
		return score;
	}
	friend ostream& operator<<(ostream& os,const Student& stu)
	{
		return os<<stu.getName()<<" "<<stu.getAge()<<" "<<stu.getSex()<<" "<<stu.getScore()<<endl;
	}
	friend istream& operator>>(istream& is,Student& stu)
	{
		return is>>stu.name>>stu.age>>stu.sex>>stu.score;	
	}
}
四、关闭文件
成员函数:
    void close(void)
    注意:只是关闭流对象当前的文件,但是流对象没有销毁,还可以继续通过open成员函数重新打开别的文件

如何以文本方式读写类对象?

读写类对象时绝大部分成员变量都是私有的,因此无法直接在类外进行读写
由于ostream/istream分别是ofstream/ifstream的父类,因此如果重载了>> <<运算符,既可以用于平时输出、输入类催下,并且还可以直接用于类对象的文本方式流操作读写
    cout<<类对象
    cin>>类对象    重载后
    ofs<<类对象
    cin>>类对象    成立
五、c++的随机读写

c++为文件IO提供了俩套设置位置指针的成员函数,为了兼容一些有俩个位置指针的操作系统,但是UNIX、Linux、Windows系统底层只有一个文件位置指针,所以使用哪一套都没有区别

istream& seekg(off_type offset,ios::seekdir origin);
功能:通过 偏移量+基础位置 设置位置指针的位置
    offset:偏移量
    origin:基础位置
        ios::beg    文件开头
        iOS::cur    当前位置
        ios::end    文件末尾
istream& seekg(pos_type position);
功能:通过绝对值的方式设置位置指针的位置
seekp类似


http://www.kler.cn/news/323005.html

相关文章:

  • 【SpringBoot详细教程】-03-整合Junit【持续更新】
  • 代码随想录Day 57|prim算法和kruskal算法精讲,题目:寻宝
  • 提升效率的秘密武器选择指南
  • PTH原理 补丁+工具
  • Java项目——苍穹外卖总结
  • Linux usb hub阅读
  • 【学习】电脑上有多个GPU,命令行指定GPU进行训练。
  • C语言习题~day33
  • 【Unity保龄球项目】的实现逻辑以及代码解释
  • Python Daphne库:ASGI服务的高效Web服务器
  • 使用FFmpeg压缩MP3格式音频
  • 利用模糊综合评价法进行数值评分计算——代码实现
  • 基于Java开发的(控制台)模拟的多用户多级目录的文件系统
  • Redis的主要特点及运用场景
  • 【Linux】ubuntu 16.04 搭建jdk 11 环境(亲测可用)
  • 数据结构:特殊矩阵 及其存储
  • 策略路由控制选路
  • apt update时出现证书相关问题,可以关闭apt验证
  • 【Redis 源码】3dict字典数据结构
  • 打点 - 泛微 E-Cology WorkflowServiceXml
  • FPGA学习(3)-38译码器实现
  • LLM基础概念:Prompt
  • LeetCode --- 416周赛
  • Unity图形用户界面!*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。(万字解析)
  • 常用性能优化方法
  • jdk tomcat 镜像制作
  • Activiti7《第九式:破气式》——流畅驱动工作流进程。面试题大全
  • Maya没有Arnold材质球
  • Docker的实践应用举例
  • C++并发编程实战