【C++ 拓展】ifstream、ofstream、fstream的使用

文章目录

  • 前言
  • 一、istream
    • 1.1 ifstream - 输入流
    • 1.2 具体使用
      • 构造函数
      • 成员函数
        • open 函数:
        • is_open 函数:
        • close 函数:
        • operator>> 重载:
        • rdbuf 函数
        • peek 函数
        • read 函数
        • getline 函数
        • ignore 函数
        • seekg 函数
        • tellg 函数
  • 二、ofstream 类
    • 1.1 构造函数
    • 1.2 函数成员
      • write 函数
  • 总结


前言

在C++编程中,文件操作是一项常见而重要的任务。为了更便捷地进行文件读写操作,C++提供了三个关键的文件流类:ifstream、ofstream和fstream。这三个类分别用于输入、输出以及读写文件。通过它们,我们能够轻松地处理文件的打开、读取、写入和关闭等操作,为程序员提供了便利的文件处理工具。

在本文中,我们将深入探讨这三个文件流类的基本用法,介绍它们的构造函数、常用成员函数以及一些实际应用示例,以帮助读者更好地理解和运用这些文件流类。


一、istream

1.1 ifstream - 输入流

ifstream 类用于从文件中读取数据,即用于输入流的文件操作。“i” 代表 “input”(输入)。
这个类继承自 istream,允许你从文件中读取数据,就像从键盘输入一样。
你可以使用 ifstream 打开文件并从中读取数据,但不能写入或更改文件的内容。
示例用途包括读取配置文件、文本文件等。

1.2 具体使用

构造函数

explicit ifstream(const char* filename, ios_base::openmode mode = ios_base::in);

参数:
filename:要打开的文件的名称。
mode:文件打开模式,默认为输入模式(ios_base::in)。

成员函数

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

参数:
filename:要打开的文件的名称。
mode:文件打开模式,默认为输入模式(ios_base::in)。
功能:打开指定的文件。

is_open 函数:
bool is_open() const;

返回值:如果文件已成功打开,则返回 true;否则返回 false。

功能:检查文件是否已经打开。

close 函数:
void close();

功能:关闭已打开的文件。

operator>> 重载:
istream& operator>>(Type& val);

参数:Type 表示要读取的数据类型。

返回值:返回输入流对象的引用。

功能:从文件中读取数据。

rdbuf 函数
streambuf* rdbuf() const;

功能: 获取与流关联的底层缓冲区的指针。
返回值: 指向底层缓冲区的指针。

peek 函数
int peek();

功能: 返回下一个字符,但不提取它。
返回值: 下一个字符的 ASCII 值,如果到达文件末尾则返回 EOF。

read 函数
istream& read(char* s, streamsize n);

功能: 从流中读取最多 n 个字符到数组 s。
参数:
s:指向存储读取字符的缓冲区的指针。
n:要读取的字符数。
返回值: 一个引用到流对象,用于链式操作。

getline 函数
istream& getline(char* s, streamsize n, char delim);

功能: 从流中读取字符,直到遇到指定的分隔符 delim 或读取了最多 n 个字符为止。
参数:
s:指向存储读取字符的缓冲区的指针。
n:要读取的字符数。
delim:分隔符。
返回值: 一个引用到流对象,用于链式操作。

ignore 函数
istream& ignore(streamsize n = 1, int delim = EOF);

功能: 从流中提取并丢弃字符,直到读取了 n 个字符或遇到指定的分隔符 delim。
参数:
n:要忽略的字符数。
delim:分隔符。
返回值: 一个引用到流对象,用于链式操作。

seekg 函数
istream& seekg(streampos pos);

功能: 设置文件指针的位置。
参数:
pos:新的文件指针位置。可以直接填数字
返回值: 一个引用到流对象,用于链式操作。

streampos 是 C++ 标准库中定义的一种类型,通常用于处理流(stream)的位置信息。在 C++ 中,流是与输入和输出设备(例如文件、标准输入/输出、字符串等)进行数据交互的抽象概念。streampos 实际上是一个类型定义,用于表示流在特定位置的位置信息。

这个类型通常被用作输入输出流的位置指示器。在处理文件或其他类型的流时,你可能需要跟踪当前读取或写入位置,这就是 streampos 起作用的地方。它可以记录特定流的位置,允许你在之后能够定位到这个位置,读取或写入数据,或者直接操作这个位置的内容。

streampos 的具体实现可能因不同的编译器或库而有所不同,但通常它是一个整数类型(比如 long long 或 streamoff),用于表示相对于流起始位置的偏移量或者一个指针,指向流中的特定位置。

在 C++ 中,常用的流类(比如 ifstream、ofstream、stringstream 等)都提供了方法来获取和设置流的位置,通常使用 tellg() 和 seekg() 方法来获取和设置输入流位置,使用 tellp() 和 seekp() 方法来获取和设置输出流位置。这些方法返回或接受 streampos 类型的参数,用于标识流的位置。

总的来说,streampos 是 C++ 中用于表示流位置的类型,可以帮助你管理和操作输入输出流的位置信息。

tellg 函数
streampos tellg();

功能: 获取当前文件指针的位置。
返回值: 当前文件指针的位置。

二、ofstream 类

1.1 构造函数

explicit ofstream(const char* filename, ios_base::openmode mode = ios_base::out);

功能: 构造一个 ofstream 对象,用于向指定文件 filename 写入数据。
参数:
filename:文件的路径和名称。
mode:打开文件的模式,默认为输出模式 (ios_base::out)。

1.2 函数成员

write 函数

ostream& write(const char* s, streamsize n);

功能: 将字符数组 s 中的 n 个字符写入流。
参数:
s:指向要写入的字符数组的指针。
n:要写入的字符数。
返回值: 一个引用到流对象,用于链式操作。
seekp 函数
cpp
ostream& seekp(streampos pos);
功能: 设置文件指针的位置。
参数:
pos:新的文件指针位置。
返回值: 一个引用到流对象,用于链式操作。
tellp 函数
cpp
streampos tellp();
功能: 获取当前文件指针的位置。
返回值: 当前文件指针的位置。
fstream 类
构造函数
cpp
explicit fstream(const char* filename, ios_base::openmode mode = ios_base::in | ios_base::out);
功能: 构造一个 fstream 对象,用于对指定文件 filename 进行读写操作。
参数:
filename:文件的路径和名称。
mode:打开文件的模式,默认为输入输出模式 (ios_base::in | ios_base::out)。


总结

文件流是C++中处理文件输入输出的重要工具,而ifstream、ofstream和fstream则是其核心代表。通过本文的介绍,我们了解了它们的基本构造函数、常用成员函数,以及如何在实际编程中应用它们来处理文件。

ifstream 用于读取文件内容,适用于处理输入操作。
ofstream 用于写入文件内容,是处理输出操作的理想选择。
fstream 则可以同时用于读写文件,为灵活的文件操作提供了支持。
无论是读取配置文件、保存用户数据还是进行其他文件相关的操作,这三个文件流类都能够满足各种需求。通过灵活运用它们,程序员能够更高效地处理文件操作,为C++程序的开发提供了强大的支持。希望本文的内容对您在C++文件操作的学习和实践中有所帮助。

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

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

相关文章

《人生苦短,我用python·五》pybind11关于继承,多态的使用

在使用 pybind11 进行 Python 和 C 之间的交互时,涉及到继承和多态的情况,需要注意几个关键点和技巧: 在 C 中定义基类和派生类 首先,在 C 中定义你的基类和派生类。例如,有一个简单的基类 Shape 和派生类 Circle&…

关于区块链技术实现的寄卖行的抵押平台建设方案

关于区块链技术实现的寄卖行抵押平台建设方案 一、项目背景与目标 随着数字化时代的快速发展,金融行业对安全性和效率的要求日益提高。寄卖行作为一种传统金融服务机构,也面临着业务模式创新和服务效率提升的挑战。本方案旨在利用区块链技术&#xff0…

【Java Web】Vite构建前端目录结构

目录 一、Vite概述 二、Vite构建Vue3工程化项目 三、ViteVue3项目目录结构 四、ViteVue3项目组件(SFC入门) 五、ViteVue3样式导入方式 六、ViteVue3响应式数据和setup语法糖 一、Vite概述 Vite是一种新型前端构建工具,能够显著提升前端开发体验;Vite结合…

Arduino IDE下载、安装和配置

文章开始先把我自己网盘里的安装包分享给大家,链接:https://pan.baidu.com/s/1cb2_3m0LnuSKLnWP_YoWPw?pwdwwww 提取码:wwww 里面一个是Arduino IDE的安装包,另一个是即将发布的版本。 第一个安装包打开直接按照我的步骤安装就…

【第一周】认识小程序

目录 认识小程序发展历史发展前景发展优势个人企业/创业 账号申请开发工具下载流程使用说明 协作项目交流收益渠道 认识小程序 发展历史 微信小程序自2016年首次提出以来,经历了快速的发展和完善过程,以下是其主要发展历史节点: 2016年1月…

将某列缺失分隔符的文字读入 Excel

有个逗号分隔的 txt,共 10 列,第 3 列有时候缺少分隔符,导致该列缺失,数据不齐只剩 9 列。比如最后两行: 01-0104-0133,MAYO, RONIE #2,202403,2024-03-21 22:51:43.000,1449.49,0.00,0.00,08,6CC6BDAC7E45 17-1782-02…

C++ 串口读写

这段代码演示了如何使用 Windows API 中的串口通信功能进行简单的数据发送和接收。它使用了串口的基本操作和设置,并通过 sendSizeCategory 函数实现了一个简单的串口通信示例,发送一个十六进制数据,并读取串口返回的数据。 _CRT_SECURE_NO_WARNINGS:这是针对使用 strcpy …

云端智慧,赋能风电场:工业级控制系统云监控网关

风力发电场监控平台实现对风电场的运行状态和风机的实时数据进行监测、控制和管理,提高风电场的可靠性和运行效率,降低维护成本,实现智能化管理。 风机机组PLC、多功能仪表、无线测温、温度变送器、档位变送器、设备接入网关上传数据服务器。…

STM32G4系列之DAC

一、STM32G4单片机有几个DAC外设? STM32G4单片机共有4个DAC,两个为低速DAC(采样率1MHz),两个为高速DAC(采样率15MHz)。共包括7个通道,3个外部通道和4个内部通道。 三个外部DAC包括DAC1和DAC2,其可以映射到外部管脚&am…

输电线路-防鸟设备神器合集!往这边看看!

有些人可能会很恨鸟儿吧。 综艺《种地吧》第一、第二季分别有陈某、王某负责河虾塘、龙虾塘,每天都会有一个“贵宾”-白鹭,如期而至开吃。兄弟俩对其真的恨,但又没办法,谁让白鹭是国家二级保护动物呢。同样在输电线路上也有这样的…

【SpringBoot Web框架实战教程】03 SpingBoot 获取 http 请求参数

不积跬步,无以至千里;不积小流,无以成江海。大家好,我是闲鹤,微信:xxh_1459,十多年开发、架构经验,先后在华为、迅雷服役过,也在高校从事教学3年;目前已创业了…

隐秘而又复杂的恶意软件:SSLoad

SSLoad 是一种隐秘的恶意软件,主要通过钓鱼邮件打开突破口,收集各种信息再回传给攻击者。近期,研究人员发现 SSLoad 通过诱饵 Word 文档投递恶意 DLL 文件,最终部署 Cobalt Strike。另一种攻击方式是利用钓鱼邮件诱导受害者到 Azu…

svn切换分支

现在有一个场景: 在svn中有一个b分支,是基于a分支拉出来的,并且我的b分支在本地已经有了改动,a分支在远端也有了改动, 我想把远端a分支的改动同步到我的本地b分支上,如何操作 目前已知的方法 项目右键-&g…

上古世纪战争台服官网地址+台服预约+预创建角色教程

上古世纪战争台服上线啦,在《上古世纪战争》中,通过主要势力和地区,剧情和角色可以想起原作。《上古世纪战争》的主要背景为,原大陆消失之后,完成移民的种族们定居在诺伊大陆之后遇到的多个势力之间的冲突。同时&#…

CentOS安装ntp时间同步服务

CentOS安装ntp时间同步服务 安装ntp 检查服务器是否安装ntp: rpm -q ntp安装ntp: yum install -y ntp服务端配置 配置文件路径:/etc/ntp.conf 设置ntp为开机启动 systemctl enable ntpd查看ntp开机启动状态 enabled:开启, disabled:关闭 …

C# 类中访问修饰符的优先级

参考链接 : C# 指南 - .NET 托管语言 | Microsoft Learn 访问修饰符 - C# | Microsoft Learn

linux指令tcpdump

目录 1. 安装 tcpdump 2. 基本用法 捕获所有网络接口上的数据包 捕获特定网络接口上的数据包 捕获特定协议的数据包 3. 示例 捕获特定主机的数据包 捕获特定端口的数据包 捕获源或目的 IP 和端口的组合 捕获 ICMP 数据包(如 ping 请求) 捕获并…

MySQL周内训参照4、触发器-插入-修改-删除

触发器 1、用户购买商品时,要求库存表中的库存数量自动修改 详细示例 delimiter $$ create trigger stock_change after -- 事件触发在 下订单之后 insert -- 监视插入事件 on stock -- 监视 order订单表 for each row begin update stock set stockstock-new.st…

C++中int、DWORD和QWORD

当谈论C编程语言时,以下术语经常被提及:int、DWORD和QWORD。它们是用于表示不同数据类型和长度的关键字。以下是它们的详细解释以及举例说明: int: int是C中表示整数的数据类型之一。它通常用于存储有符号的整数值。int的长度在不…

DLS策略洞察:如何应对AI数据中心网络交换机市场的爆发式增长?

摘要: 随着AI技术的发展和应用,AI数据中心对网络交换机的需求日益增加。摩根士丹利预计,2023-2026年间,AI数据中心网络交换机的收入复合年增长率(CAGR)将达到55%。本文将详细分析AI数据中心网络交换机市场…