fstream读写文件read_使用同一个fstream

fstream读写文件read_使用同一个fstream1.fstream是什么?fstream是C++标准库中面向对象库的一个,用于操作流式文件。fstream本质上是一个class,提供file操作的各种方法。2.关系图basic_fstream是一个类模板,暂且不用深入理解它。我们关心的事,它前面继承的那一堆东西。fstream是basic_fstream<char>的一个模板类,也就说明,fstream也继承了一堆东西。我们再关心一下从ios_base基类,重点继承了什么?文件流的打开模式。3.实验3.1打开/创建文件

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1.fstream是什么?

fstream是C++标准库中面向对象库的一个,用于操作流式文件。
fstream本质上是一个class,提供file操作的各种方法。

2.关系图

在这里插入图片描述
basic_fstream是一个类模板,暂且不用深入理解它。我们关心的事,它前面继承的那一堆东西。

fstream是basic_fstream<char>的一个模板类,也就说明,fstream也继承了一堆东西。

我们再关心一下从 ios_base基类,重点继承了什么?文件流的打开模式。
在这里插入图片描述

3.实验

3.1 打开/创建文件

void open( const char *filename, ios_base::openmode mode =ios_base::in|ios_base::out );

#include <iostream>
#include <fstream>
using namespace std;
int main()
{ 
   
    fstream fs;
    cout << "hello" << endl;
    fs.open("d://zhou");    
    if (fs.is_open())
    { 
   
        cout << "open success" << endl;
    }
    else
    { 
   
        cout << "open failed" << endl;
    }
    system("pause");
    return 0;
}

输出结果
在这里插入图片描述
打开失败了。
说明不能自动创建不存在的文件。

修改fs.open("d://zhou");fs.open("d://zhou", ios_base::in); ,即只读的方式打开。
运行后,文件依旧不能被创建。

修改fs.open("d://zhou");fs.open("d://zhou", ios_base::out); ,即只写的方式打开。
运行后,文件在D盘被创建了。
在这里插入图片描述在这里插入图片描述
所以,想要打开一个不存的文件,并且创建它,必须包含 ios_base::out模式。

3.2 写文件 write()

basic_ostream& write( const char_type* s, std::streamsize count );
它是继承于ostream类

#include <iostream>
#include <fstream>
using namespace std;
int main()
{ 
   
    char str[] = "hello world";
    fstream fs;
    cout << "hello" << endl;
    fs.open("d://zhou.txt", ios_base::out); 
    if (fs.is_open())
    { 
   
        cout << "open success" << endl;
    }
    else
    { 
   
        cout << "open failed" << endl;
    }
    
    fs.write(str, sizeof(str) - 1);  //写入内容
    //fs << str << endl;
    
    system("pause");

    return 0;
}

实验结果
在这里插入图片描述
写入有两种方式,一种是使用 fs.write,另一种是使用 << 流操作符号。流操作符号本质也是调用了write方法。

3.3 读文件 read()

basic_istream& read( char_type* s, std::streamsize count );
它是继承于istream类。

#include <iostream>
#include <fstream>
using namespace std;
int main()
{ 
   
    char str[] = "hello world";
    char rstr[128] = { 
   0};
    fstream fs;

    cout << "hello" << endl;

    fs.open("d://zhou.txt", ios_base::out | ios_base::in); 
    if (fs.is_open())
    { 
   
        cout << "open success" << endl;
    }
    else
    { 
   
        cout << "open failed" << endl;
    }

    fs.write(str, sizeof(str) - 1);  //写入
    fs.sync();                       //写入硬盘
    fs.seekg(ios_base::beg);         //文件指针的位置回到开头
    fs.read(rstr, sizeof(rstr));     //读数据

    cout << rstr << endl;

    fs.close();
    system("pause");

    return 0;
}

实验结果
在这里插入图片描述
写入”hello word” 再读出来。
咦?怎么读一个数据不是只调用read就行吗?怎么多了好几个?
因为…
fs.write()是将内容写入缓冲区(内存)。fs.sync() 是为了将缓冲区的内容刷新写入硬盘。而read方法是只能读取硬盘上的内容,读不了缓冲区。
fs.seekg()则是将文件的指针回到开头。当为了写入之后,文件指针指向了末尾了。调用read时候,也就会从末尾读,啥也读不出来。

3.4 读文件 getline()

读文件的操作,getlineread更加常用。
getline一读就一整行了。
getline的内容实现也是依靠read方法(c语言是这样,c++可能也是这样)。

    while (!fs.eof()) 
    { 
   
        fs.getline(rstr, sizeof(rstr));     //读数据
        cout << rstr << endl;
    }

fs.eof()是为了判断是否到达末尾,若抵达末尾,返回true,否则false。

实验结果
在这里插入图片描述

4.最后

fstream的方法何其之多,掌握比较常用的即可。许多操作跟C语言类似。
学习C++最重要的技能之一是学会查找文档。
中文手册:https://www.apiref.com/cpp-zh/cpp.html
英文手册:http://www.cplusplus.com/reference/

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/191772.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 详解自动化运维平台的构建过程[通俗易懂]

    详解自动化运维平台的构建过程[通俗易懂]2013年,我加入了聚美优品,当时成都团队仅有四五个人,负责一些辅助系统的日常运维,比如查查日志等。随着公司规模逐渐的扩大,一些重要的业务往成都迁移,这对成都团队是一个非常大的挑战。业务部署最开始是手工的,我们逐渐觉得应该有一个平台来满足我们的工作,所以我们打造了一个运维平台。本文将围绕平台里有关自动化的东西做一个介绍,当然我们是一个小团队,不足的地方请大家指正。传统运维带来的坑说到运维自动化,前…

  • 阿里云产品介绍

    阿里云产品介绍文章目录一、阿里云四大件1、云服务器ECS2、云数据库RDS3、负载均衡SLB4、对象存储OSS5、其他的云计算产品1)内容分发网络CDN:2)专有网络VPC:2)弹性伸缩:二、阿里云安全系列产品1、DDoS高防IP2、安骑士3、证书服务4、态势感知5、堡垒机三、阿里云网络中间件相关消息队列MQ四、阿里云万网产品1、域名2、虚拟主机3、企业邮箱4、云解析DNS公有云和私有云概念bai概念imghttps://www.aliyun.com/product/rds/mysql?spm=a2cls.b9237

  • CSDN日报20170304——《令人比较失落的IT圈子-关于华为裁员》[通俗易懂]

    CSDN日报20170304——《令人比较失落的IT圈子-关于华为裁员》[通俗易懂]早在几年前就有人说过程序员在35岁以后如果不做管理就很难混了,如今由于近日的华为事件被炒得沸沸扬扬,显然让这多年前人们的猜测变成了现实,我今年也正好到了这个该“退休”的年龄,所以就想趁机悔恨一番。首先,澄清的一点就是,我并无意诋毁这个IT行业,我只是希望大家可以更加清除的认清这个行业。

  • Mybatis与Spring集成:SqlSessionTemplate[通俗易懂]

    Mybatis与Spring集成:SqlSessionTemplate[通俗易懂]Mybatis与Spring集成:SqlSessionTemplateSqlSessionTemplate构造方法publicSqlSessionTemplate(SqlSessionFactorysqlSessionFactory,ExecutorTypeexecutorType,PersistenceExceptionTranslatorexceptionTra…

  • 三、设计模式介绍—她是谁,我们要去哪里? #和设计模式一起旅行#

    模式模式(Pattern),指事物的标准样式,百度百科上面说的,其实说白了模式就是我们现在说的套路!模式 == 套路模式是一种思想,说大了特别的复杂和深奥,不管怎么样模式的使用可以解决特定场景下特定的问题!准确表达:模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。软件模式那么在软件中使用模式,就是软件模式(Software Pattern),用…

  • 群晖|半洗白后moments正常显示人像、主题、预览「建议收藏」

    群晖|半洗白后moments正常显示人像、主题、预览「建议收藏」Moments不工作群晖重装6.2.3之后,发现moments不能正常工作了,不管是人物还是主题都是空白,还会显示有XXX张照片待发现,但会停在这儿。这如何能忍,网络上找到替换文件大法,没啥用,这台虚拟机内黑群晖只能暂时放下。想到自己还有台裸机安装的黑群晖,尝试后moments正常工作。替换ffmpeg为第三方替换的目的是为了能够正确的生成预览图、视频等。dsm版本及内核uname-a#LinuxvmDSM3.10.105#25426SMPTueMay1204:53:1

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号