C++高级教程学习---文件和流

文章目录

  • 前言
  • 文件和流
    • 打开文件
    • 关闭文件
    • 写入文件
    • 读取文件
    • 检查文件
    • 读取和写入实例

前言

学习如何从文件读取流和向文件写入流。


文件和流

fstream标准库 中定义了三个新的数据类型:

  • ofstream:该数据类型表示输出文件流,用于创建文件并向文件写入信息。
  • ifstream: 该数据类型表示输入文件流,用于从文件读取信息。
  • fstream:该数据类型通常表示文件流,且同时具有ofstram和ifstream俩种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。

打开文件

从文件读取信息或者向文件写入信息之前,必须先打开文件。

ofstream和fstream对象都可以用来打开文件进行读写操作,如果只需要打开文件进行读操作,则使用ifstream对象。

下面是open()函数的标准语法,open()函数是fstream、ifstream和ofstream对象的一个成员。

void open(const cha *filename, ios::openmode mode);

在这里,open()成员函数的第一参数指定要打开的文件的名称和位置,第二个参数定义文件被打开的模式。

模式选择:

  • ios::app 追加模式。所有写入都追加到文件末尾。
  • ios::ate 文件打开后定位到文件末尾。
  • ios::in 打开文件用于读取。
  • ios::out 打开文件用于写入。
  • ios::trunc 如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为0。

可以将上述俩种或俩种以上的模式结合使用,例如你想要以写入模式打开文件,并希望截断文件,以防止文件已存在,那么可以使用下面的语法:

ofstream outfile;
outfile.open("file.dat", ios::out | ios::trunc);

类似的如果想要打开一个文件用于读写,可以使用:

ifstream afile;
afile.open("file.dat", ios::out | ios::in);

关闭文件

当C++程序终止时,它会自动刷新所有流,释放所有分配的内存,并关闭所有打开的文件。但程序员应该养成一个好习惯,在程序终止前关闭所有打开的文件。

下面是close()函数的标准语法,close()函数也是fstream、ifstream和ofstream对象的一个成员。

void close();

写入文件

在C++编程中,我们使用**流插入运算符(<<)**向文件写入信息。

outputFile << "This is some data that I'm writing to the file." << std::endl;

读取文件

在C++编程中,我们使用**流提取运算符(>>)**从文件读取信息。

   // 从输入文件中读取整数并计算他们的和while (inputFile >> number){sum += number;}

检查文件

在C++中可以使用文件流对象的方法和标志来进行文件检查以确保文件操作的正确性。

  • 使用 is_open() 方法:is_open() 方法用于检查文件是否成功打开。如果文件成功打开,它将返回 true;否则,返回 false。
std::ifstream inFile("example.txt");
if (inFile.is_open()) {// 文件已成功打开,可以进行读取操作
} else {// 文件打开失败,进行错误处理
}
  • 使用 good() 方法:good() 方法用于检查文件流的状态是否有效。如果文件流处于有效状态,它将返回 true;否则,返回 false。
std::ifstream inFile("example.txt");
if (inFile.good()) {// 文件流处于有效状态,可以进行读取操作
} else {// 文件流处于无效状态,进行错误处理
}
  • 使用 fail() 方法:fail() 方法用于检查文件是否发生了失败状态,例如,当试图读取一个无效类型的数据时。如果文件发生了失败状态,它将返回 true;否则,返回 false。
std::ifstream inFile("example.txt");
if (inFile.fail()) {// 文件操作失败,进行错误处理
} else {// 文件操作成功,可以进行读取操作
}

读取和写入实例

#include <iostream>
#include <fstream>int main(){//打开输入文件以读取数据std::ifstream inputFile("input.txt");if (!inputFile.is_open()){std::cerr << "Failed to open the input file."<< std::endl;return 1;}int sum = 0;int number;// 从输入文件中读取整数并计算他们的和while (inputFile >> number){sum += number;}inputFile.close();//打开输出文件以写入结果std::ofstream outputFile("output.txt");if (!outputFile.is_open()){std::cerr << "Failed to open the output file." << std::endl;return 1;}// 将计算结果写入输出文件outputFile << "Sum of numbers in the input file: " << sum << std::endl;outputFile.close(); //关闭输出文件std::cout << "Sum has been written to the output file." << std::endl;return 0;
}

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

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

相关文章

Iceberg教程

目录 教程来源于尚硅谷1. 简介1.1 概述1.2 特性 2. 存储结构2.1 数据文件(data files)2.2 表快照(Snapshot)2.3 清单列表(Manifest list)2.4 清单文件(Manifest file)2.5 查询流程分析 3. 与Flink集成3.1 环境准备3.1.1 安装Flink3.1.2 启动Sql-Client 3.2 语法 教程来源于尚硅…

基于单片机的滚筒洗衣机智能控制系统设计

收藏和点赞&#xff0c;您的关注是我创作的动力 文章目录 概要 一、系统整体设计方案2.1控制系统的功能2.2设计的主要内容 二、硬件设计3.1 控制系统整体框图3.2 电源电路 三 软件设计主程序设计仿真设计 四、 结论 概要 因此我们需要一个完善的智能系统来设计一个全自动滚筒洗…

代码随想录算法训练营第23期day43|518. 零钱兑换II、377. 组合总和Ⅳ

目录 一、&#xff08;leetcode 518&#xff09;零钱兑换II 二、&#xff08;leetcode 377&#xff09;组合总和 Ⅳ 完全背包问题和01背包在描述上的区别是&#xff1a;完全背包中的物品可以被无限使用&#xff1b;在代码上的区别是&#xff1a;遍历顺序中都是从小到大遍历&a…

GCN火车票识别项目 P2 图卷积神经网络介绍

深度学习一直都是被几大经典模型统治着&#xff0c;常见的有CNN、RNN网络&#xff0c;它们在CV和NLP领域都取得了优异的效果。但人们发现了很多CNN、RNN无法解决&#xff0c;或者效果不好的问题——图结构数据&#xff0c;如社交网络、人物关系、分子结构等&#xff0c;所以就有…

MySQL 为什么在 8.0 版本中移除了查询缓存功能?

MySQL 在 8.0 版本中移除了查询缓存功能。查询缓存是在较早版本的 MySQL 中存在的一个功能&#xff0c;其主要目的是缓存查询结果&#xff0c;以便在之后相同的查询再次被执行时&#xff0c;可以直接返回缓存的结果&#xff0c;而不必再次执行查询&#xff0c;从而提高性能。 …

VMware产品收集日志方法汇总

概述 vCenter日志是一个用于存储与vSphere环境相关的各种活动、事件和警告的日志系统。通过收集并分析vCenter日志&#xff0c;管理员可以获得有关其虚拟化环境的重要洞察和故障排除信息。 vCenter日志由多个组件组成&#xff0c;包括vCenter Server、ESXi主机和其他vSphere组…

Tomcat运行日志乱码问题/项目用tomcat启动时窗口日志乱码

文章目录 一、问题描述&#xff1a;二、产生原因三、解决方法 一、问题描述&#xff1a; 项目在idea中运行时日志是正常的&#xff0c;用Tomcat启动时发现一大堆看不懂的文字&#xff0c;如 二、产生原因 产生乱码的根本原因就是编码和解码不一致&#xff0c;举个例子就是翻…

SLAM从入门到精通(参数标定)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 标定是slam开发过程中很重要的一个环节。这部分内容涉及到很多方面&#xff0c;比如说传感器、比如说算法、比如说机械&#xff0c;总之好的标定不…

Ubuntu18.04系统镜像制作

安装使用systemback # 添加源 sudo add-apt-repository --remove ppa:nemh/systemback sudo add-apt-repository "deb http://ppa.launchpad.net/nemh/systemback/ubuntu xenial main"# 下载 sudo apt update sudo apt install systemback打开systemback,点击创建li…

【Python机器学习】零基础掌握VotingClassifier集成学习

为什么一些数据预测模型在复杂场景下表现不如预期? 在当今数据驱动的世界中,企业和研究者面临着如何从大量数据中提取有价值信息的挑战。假设一个电商公司想要通过用户行为数据预测产品销量,通常会使用单一的算法模型,如逻辑回归、随机森林或朴素贝叶斯。但问题来了,如果…

树结构及其算法-二叉排序树

目录 树结构及其算法-二叉排序树 C代码 树结构及其算法-二叉排序树 事实上&#xff0c;二叉树是一种很好的排序应用模式&#xff0c;因为在建立二叉树的同时&#xff0c;数据已经经过初步的比较&#xff0c;并按照二叉树的建立规则来存放数据&#xff0c;规则如下&#xff1…

人们常常下定决心“不改变”

"因为我的性格很悲观" 有的人会觉得一些事情发生&#xff0c;是自己性格使然&#xff0c;改变不了。 但其实性格是可以改变的。 这听起来似乎不太现实&#xff0c;自己的性格就是这样&#xff0c;怎么会改变&#xff1f; 那换种表达&#xff0c;我们看待世界的方式可…

源码编译 7z

源码编译 7z 2023.11.04 ChrisZZ 1. 目的 在 macOSX 电脑上&#xff0c;编译 7zip 的控制台应用程序 7zz&#xff0c; 复刻官方给的/homebrew 提供的 7zz 程序。 2. 下载源码 https://www.7-zip.org/a/7z2301-src.tar.xz 3. 查询编译规则描述文件 7zz 是控制台程序&…

【蓝桥每日一题]-倍增(保姆级教程 篇1)

今天讲一下倍增 目录 题目&#xff1a;忠诚 思路&#xff1a; 题目&#xff1a;国旗计划 思路&#xff1a; 查询迭代类倍增&#xff1a; 本质是一个一个选区间使总长度达到 M,类似凑一个数。而我们会经常用不大于它最大的二的次幂&#xff0c;减去之后&#xff0c;再重复这…

element UI DatePicker 日期选择器 点击时间点可选限制范围前后十五天

<el-date-picker v-model"timeRange" type"datetimerange" align"right" :default-timedefaultTimevalue-format"yyyy-MM-dd HH:mm:dd" range-separator"至" start-placeholder"开始日期"end-placeholder"…

编码器的分类

目录 光电编码器 一、增量式编码器 二、绝对式编码器 三、混合式绝对值编码器 四、旋转变压器 五、正余弦伺服电机编码器 光电编码器 光电编码器主要有增量式编码器、绝对式编码器、混合式绝对值编码器、旋转变压器、正余弦伺服电机编码器等&#xff0c;其中增量式编码器…

PackageManagerService初始化

参考资料&#xff1a;PMS 第 1 篇 - PackageManagerService 初始化 这个是基于Android 7的&#xff0c;我看的代码是Android 9 前言 PMS 用来管理所有的 package 信息&#xff0c;包括安装、卸载、更新以及解析 AndroidManifest.xml 以组织相应的数据结构&#xff0c;这些数…

《研发效能(DevOps)工程师》课程简介(三)丨IDCF

在研发效能领域中&#xff0c;【开发与交付】的学习重点在于掌握高效的开发工具和框架&#xff0c;了解敏捷开发方法&#xff0c;掌握持续集成与持续交付技术&#xff0c;以及如何保证应用程序的安全性和合规性等方面。 由国家工业和信息化部教育与考试中心颁发的职业技术证书…

leetCode 322.零钱兑换 完全背包 + 动态规划 + 记忆化搜索 + 递推 + 空间优化 + 画递归树

关于此题我的往期文章&#xff1a;LeetCode 322.零钱兑换 完全背包 动态规划_呵呵哒(&#xffe3;▽&#xffe3;)"的博客-CSDN博客https://heheda.blog.csdn.net/article/details/133386579看本期文章时&#xff0c;可以先回顾一下动态规划入门知识和完全背包理论和实战…

面试算法50:向下的路径节点值之和

题目 给定一棵二叉树和一个值sum&#xff0c;求二叉树中节点值之和等于sum的路径的数目。路径的定义为二叉树中顺着指向子节点的指针向下移动所经过的节点&#xff0c;但不一定从根节点开始&#xff0c;也不一定到叶节点结束。例如&#xff0c;在如图8.5所示中的二叉树中有两条…