c++学习:文件输入输出类模板

news2024/12/28 22:05:35

目录

头文件

常用类模板

basic_ifstream文件输入类模板

模板原型

模板的成员类型和成员对象和成员函数

文件输入类模板的容器对象

实例

basic_ifstream文件输出类模板

模板原型

模板的成员类型和成员对象和成员函数

实例

basic_ifstream文件输出类模板

模板原型

模板的成员类型和成员对象和成员函数

实例


头文件

#include<fstream>

常用类模板

  • basic_ifstream实现高层文件流输入操作
  • basic_ofstream实现高层文件流输出操作
  • basic_fstream实现高层文件流输入/输出操作
     

basic_ifstream文件输入类模板

类模板 basic_ifstream 实现文件流上的高层输入操作。它将 std::basic_istream 的高层接口赋予基于文件的流缓冲(std::basic_filebuf)。

模板原型

template<
    class CharT,
    class Traits = std::char_traits<CharT>
> class basic_ifstream : public std::basic_istream<CharT, Traits>

模板的成员类型和成员对象和成员函数

std::basic_ifstream - cppreference.comicon-default.png?t=N7T8https://zh.cppreference.com/w/cpp/io/basic_ifstream

文件输入类模板的容器对象

    //实例化一个文件输入类模板的对象 -----这个对象是读操作
    std::basic_ifstream<char> ifstream;
    //typedef std::basic_ifstream<char>   std::ifstream;
    std::ifstream file;

实例

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    //cout << "Hello World!" << endl;
    //实例化一个文件输入类模板的对象 -----这个对象是读操作
    //std::basic_ifstream<char> ifstream;这样写太麻烦
    //c++起了别名 typedef std::basic_ifstream<char>   std::ifstream;
    std::ifstream file;

    //打开文件
    //in-->读操作  out 写操作
    file.open("1.txt",std::ios_base::in|std::ios_base::out);
    //也可以这么写
    std::ifstream file1("1.txt",std::ios_base::in|std::ios_base::out);

    //判断是否打开成功
    if(file.is_open() == false)
    {
        cout<<"open error"<<endl;
        return -1;
    }

    //从文本中 读取数据只能获取一个字符串,有空格空行会断开
    string data;
    file>>data;

    //eof 判断是否到达末尾
    while(!file.eof())
    {
        char text[1024] = {0};
        //getline  获取 一行的数据
        file.getline(text,sizeof(text));

        cout<<"text:"<<text<<endl;
    }

    file.close();
    file1.close();
    return 0;
}

basic_ifstream文件输出类模板

类模板 basic_ofstream 实现文件上基于流的高层输出操作。它将 std::basic_ostream 的高层接口赋予基于文件的流缓冲(std::basic_filebuf)。

模板原型

template<
    class CharT,
    class Traits = std::char_traits<CharT>
> class basic_ofstream : public std::basic_ostream<CharT, Traits>

模板的成员类型和成员对象和成员函数

std::basic_ofstream - cppreference.comicon-default.png?t=N7T8https://zh.cppreference.com/w/cpp/io/basic_ofstream

实例

#include <fstream>
#include <iostream>
#include <string>
 
int main()
{
    //写入
    std::string filename = "Test.b";
    {
        //创建对象
        std::ofstream ostrm(filename, std::ios::binary);
        double d = 3.14;
        
        ostrm.write(reinterpret_cast<char*>(&d), sizeof d); // 二进制输出
        ostrm << 123 << "abc" << '\n';                      // 文本输出
    }
 
    //读取
    std::ifstream istrm(filename, std::ios::binary);
    double d;
    istrm.read(reinterpret_cast<char*>(&d), sizeof d);
    int n;
    std::string s;
    istrm >> n >> s;
    std::cout << "回读:" << d << " " << n << " " << s << '\n';
}

运行成功输出
回读:3.14 123 abc

basic_ifstream文件输出类模板

类模板 basic_fstream 实现基于文件的流上的高层输入/输出。它将 std::basic_iostream 的高层接口赋予基于文件的缓冲(std::basic_filebuf)。

模板原型

template<
    class CharT,
    class Traits = std::char_traits<CharT>
> class basic_fstream : public std::basic_iostream<CharT, Traits>

模板的成员类型和成员对象和成员函数

std::basic_fstream - cppreference.comicon-default.png?t=N7T8https://zh.cppreference.com/w/cpp/io/basic_fstream

实例

#include <fstream>
#include <iostream>
#include <string>
 
int main()
{
    //定义字符串文件名
    std::string filename{"test.bin"};
    //以读写方式打开文件
    std::fstream s{filename, s.binary | s.trunc | s.in | s.out};
    //判断是否打开成功
    if (!s.is_open())
        std::cout << "打开 " << filename << " 失败\n";
    else
    {
        // 写入
        double d = 3.14;
        s.write(reinterpret_cast<char*>(&d), sizeof d); // 二进制输出
        s << 123 << "abc";                              // 文本输出
 
        // 对于 fstream,这会移动文件位置指针(放置与获取),移到最前面
        s.seekp(0);
 
        // 读取
        d = 2.71828;
        s.read(reinterpret_cast<char*>(&d), sizeof d); // 二进制输入
        int n;
        std::string str;
        if (s >> n >> str)                             // 文本输入
            std::cout << "从文件读回:" << d << ' ' << n << ' ' << str << '\n';
    }
}

输出
从文件读回:3.14 123 abc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1368520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Certum与Geotrust的SSL证书区别

Certum和GeoTrust都是知名的CA认证机构&#xff0c;这两个品牌下的SSL证书在多个方面存在一些差异。今天就随SSL盾小编了解Certum与Geotrust证书的区别。 一、Certum机构背景 Certum是波兰的一家CA认证机构&#xff0c;成立于2002年&#xff0c;至今已有近20多年的历史。旗下有…

在NR中,什么是PDCCH order?

根据38.300中触发RA的场景&#xff0c;PDCCH Order 发起的随机接入对应的上图中橙框中的过程&#xff0c;即用于上行失步后&#xff0c;当gNB有下行数据要发送时&#xff0c;会使用PDCCH Order强制UE发起RACH以重新完成上行同步。 配置有SUL的小区进行RA时&#xff0c;网络可以…

深入了解pnpm:一种高效的包管理工具

✨专栏介绍 在当今数字化时代&#xff0c;Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序&#xff0c;就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术&#xff0c;以及各种框架、库和工具…

Golang 交叉编译之一文详解

博客原文 文章目录 Golang 中的交叉编译不同操作系统间的编译Linux 下编译windowsmacos windows 下编译Linuxmacos macos 下编译Linuxwindows 不同架构下的编译amd64x86 参考 Golang 中的交叉编译 在 Golang 中&#xff0c;交叉编译指的是在同一台机器上生成针对不同操作系统或…

关于最近VSCode的Python代码格式化失效问题的解决办法

隔了一段时间再次打开VSCode写Python脚本&#xff0c;Python扩展弹出一条警告 查看日志输出发现Python的代码格式化设置发生了变化 简单来说就是Python扩展已经将原有的默认代码格式化工具 "ms-python.python" 弃用&#xff0c;格式化功能已移交到单独的格式化工具…

CUDA安装一直卡在检查系统兼容性,或花费极长的时间检查兼容性,但最后显示NVIDIA安装程序失败

CUDA安装一直卡在检查系统兼容性&#xff0c;或花费极长的时间检查兼容性&#xff0c;但最后显示NVIDIA安装程序失败 ⚙️1.软件环境⚙️&#x1f50d;2.问题描述&#x1f50d;&#x1f421;3.解决方法&#x1f421;&#x1f914;4.结果预览&#x1f914; ⚙️1.软件环境⚙️ W…

【算法与数据结构】70、LeetCode爬楼梯

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;因为每次可以爬1阶或者2阶台阶&#xff0c;若想到达第i阶&#xff0c;则有两种情况&#xff1a;在第i-…

【数据结构专题】「延时队列算法」史上手把手带你认识一下数据结构的基本概念与术语

在本节中&#xff0c;我们将对一些概念和术语赋以确定的含义&#xff0c;以便与读者取得“共同的语言”。这些概念和术语将在以后的章节中多次出现。 数据 概念 数据(data) 是对客观事物的符号表示&#xff0c; 在计算机科学中是指所有能输人到计算机中并被计算机程序处理的…

强烈推荐!2024年设计师必备的10款Sketch插件

在现在的设计领域内&#xff0c;Sketch 已然成为设计师们最信赖的工具之一。为了更高效、更便捷地完成设计任务&#xff0c;Sketch 插件市场还提供了丰富的辅助插件。本文将深入盘点Sketch设计中不可或缺的10款插件&#xff0c;为广大设计师提供更丰富的设计体验。 1、摹客插件…

预付费平台在转供电的应用

安科瑞 崔丽洁 前言 国家从2018年开始对转供电加价开展规范清理以来&#xff0c;已经出来了一系列政策&#xff0c;不仅包括专门针对转供电问题的政策&#xff0c;18-20年间还在每次降电价政策中突出强调了转供电主体不得截留降价红利的要求。从具体内容看&#xff0c;各地政策…

test fuzz-01-模糊测试(Fuzz Testing)入门 Atheris、Jazzer、jqf、kelinci、FLA、libfuzzer 对比

拓展阅读 开源 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) 开源 Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) test fuzz-01-模糊测试&#xff08;Fuzz Testing&#xff09; test fuzz-…

计算机毕业设计选题分享-SSM书籍借阅管理系统04770(赠送源码数据库)JAVA、PHP,node.js,C++、python,大屏数据可视化等

SSM书籍借阅管理系统 摘 要 随着科学技术的告诉发展&#xff0c;我们已经步入数字化、网络化的时代。图书馆是学校的文献信息中心&#xff0c;是为全校教学和科学研究服务的学术性机构&#xff0c;是学校信息化的重要基地。图书馆的工作是学校和科学研究工作的重要组成部分&…

ChatGPT付费创作系统V2.5.5独立版+前端

ChatGPT付费创作系统V2.5.5版本优化了很多细节&#xff0c;功能增加增加长篇写作功能。该版本为编译版无开源&#xff0c;本版本特别处理了后台弹窗、暗链网址。特别优化了数据库。升级过程中未发现任何BUG&#xff0c;全新安装或者升级安装均未出现400或者500错误&#xff0c;…

性能分析与调优: Linux 实现 缺页剖析与火焰图

目录 一、实验 1.环境 2.缺页(RSS增长)剖析与火焰图 一、实验 1.环境 &#xff08;1&#xff09;主机 表1-1 主机 主机架构组件IP备注prometheus 监测 系统 prometheus、node_exporter 192.168.204.18grafana监测GUIgrafana192.168.204.19agent 监测 主机 node_exporter…

密码输入检测 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 给定用户密码输入流input,输入流中字符 ‘<’ 表示退格,可以清除前一个输入的字符,请你编写程序,输出最终得到的密码字符,并判断密码是否满足如下的密码安全要求。 密码安全要求如下: 密码长度&…

哈希-力扣202快乐数

题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&…

gdal获取最小外接矩形

地理信息系统中常用最小外接矩形&#xff08;MBR)表示一个地理要素的大致位置&#xff0c;地理系统中的许多操作&#xff0c;例如空间查询&#xff0c;空间检索&#xff0c;都需要用最小外接矩形建立RTree&#xff0c;以提升运算速度。 gdal中使用OGREnvelope定义最小外接矩阵&…

Linux Debian12系统gnome桌面环境默认提供截屏截图工具gnome-screenshot

一、简介&#xff1a; 在Debian12中系统gnome桌面环境默认提供一个截图捕获工具screenshot,可以自定义区域截图、屏幕截图、窗口截图和录制视频&#xff0c;截图默认保存在“~/图片/截图”路径下。 可以在应用程序中搜索screenshot,如下图&#xff1a; 也可以在桌面右上角找到…

使用JGit拉取代码提示未授权not authorized

原因&#xff1a;2021年8月13日后不支持密码登录&#xff0c;需要使用token验证 调用时候需要先去git仓库创建个人令牌 需要在安全中心创建个人token&#xff0c;使用token名称作为账号&#xff0c;使用token作为密码。 另&#xff1a; Github克隆仓库的三种方式对比&#xff…

数据结构实验2:队列的应用

目录 一、实验目的 二、实验原理 1.1 队列的基本操作 1.1.1 队列的定义 1.1.2 队列的初始化 1.1.3 入队操作 1.1.4 出队操作 1.1.5 检查队列是否为空 1.1.6 返回队列的长度 2.1队列的运用 三、实验内容 问题描述 代码 截图 分析 一、实验目的 1、理解并掌握队列…