白骑士的C++教学高级篇 3.1 文件操作

系列目录

上一篇:白骑士的C++教学进阶篇 2.4 标准模板库(STL)

        文件操作是C++编程中的一个重要部分,允许程序与外部存储设备进行交互,从而实现数据的持久化存储和读取。C++标准库提供了丰富的文件操作功能,包括文件的读写、文件流和二进制文件操作。本篇博客将详细介绍这些内容,帮助您掌握C++文件操作的基本技巧。

文件的读写

        C++标准库中的文件读写通过文件流(file stream)实现。文件流分为输入文件流(ifstream)和输出文件流(ofstream),分别用于从文件读取数据和向文件写入数据。

文件写入

        首先,让我们看看如何使用‘ofstream‘类向文件写入数据。‘ofstream‘类用于创建文件并写入数据。如果文件不存在,它会创建文件;如果文件已经存在,它会覆盖文件内容。例如:

#include <iostream>
#include <fstream>
#include <string>int main() {std::ofstream outFile("example.txt");if (outFile.is_open()) {outFile << "Hello, World!" << std::endl;outFile << "This is a test file." << std::endl;outFile << "C++ file operations are easy to learn." << std::endl;outFile.close();std::cout << "Data written to file successfully." << std::endl;} else {std::cerr << "Unable to open file for writing." << std::endl;}return 0;
}

        在上面的代码中,我们使用‘ofstream‘创建了一个名为‘example.txt‘的文件,并向文件中写入了几行文本。最后关闭文件流。

文件读取

        接下来,让我们看看如何使用 ‘ifstream‘ 类从文件读取数据。‘ifstream‘ 类用于打开文件并读取数据,例如:

#include <iostream>
#include <fstream>
#include <string>int main() {std::ifstream inFile("example.txt");std::string line;if (inFile.is_open()) {while (getline(inFile, line)) {std::cout << line << std::endl;}inFile.close();} else {std::cerr << "Unable to open file for reading." << std::endl;}return 0;
}

        在上面的代码中,我们使用 ‘ifstream‘ 打开了一个名为 ‘example.txt‘ 的文件,并逐行读取文件内容,打印到标准输出。

文件流

        C++标准库提供了一个更通用的文件流类——‘fstream‘,它既可以用于文件读取,也可以用于文件写入。通过指定文件流的打开模式,可以实现不同的文件操作需求。

文件流的打开模式

        ‘fstream‘类的打开模式包括:

  • ios::in:打开文件用于读取。
  • ios::out:打开文件用于写入。
  • ios::app:打开文件用于追加写入。
  • ios::ate:文件打开后定位到文件末尾。
  • ios::trunc:如果文件存在,打开时清空文件内容。
  • ios::binary:以二进制模式打开文件。

示例代码

        下面的示例代码展示了如何使用‘fstream‘类同时进行文件的读写操作:

#include <iostream>
#include <fstream>
#include <string>int main() {std::fstream file("example.txt", std::ios::in | std::ios::out | std::ios::app);if (file.is_open()) {// 写入数据file << "Appending a new line to the file." << std::endl;// 定位到文件开头file.seekg(0);// 读取数据std::string line;while (getline(file, line)) {std::cout << line << std::endl;}file.close();} else {std::cerr << "Unable to open file." << std::endl;}return 0;
}

        在上面的代码中,我们使用 ‘fstream‘ 类打开了一个名为 ‘example.txt‘ 的文件,以读取、写入和追加模式打开文件。首先,我们向文件中追加了一行文本,然后定位到文件开头,并逐行读取文件内容,打印到标准输出。

二进制文件操作

        除了处理文本文件,C++还可以处理二进制文件。二进制文件操作通常用于存储非文本数据,如图像、音频、视频等。与文本文件不同,二进制文件的读写操作必须使用二进制模式。

二进制文件写入

        下面的示例代码展示了如何使用‘ofstream‘类以二进制模式向文件写入数据:

#include <iostream>
#include <fstream>int main() {std::ofstream outFile("example.bin", std::ios::binary);if (outFile.is_open()) {int numbers[] = {1, 2, 3, 4, 5};outFile.write(reinterpret_cast<char*>(numbers), sizeof(numbers));outFile.close();std::cout << "Binary data written to file successfully." << std::endl;} else {std::cerr << "Unable to open file for writing." << std::endl;}return 0;
}

        在上面的代码中,我们使用 ‘ofstream‘ 类以二进制模式创建了一个名为 ‘example.bin‘ 的文件,并向文件中写入了一个整数数组。‘reinterpret_cast<char*>(numbers)‘ 用于将整数数组的指针转换为字符指针,以便写入二进制数据。

二进制文件读取

        接下来,让我们看看如何使用‘ifstream‘类以二进制模式从文件读取数据,代码如下:

#include <iostream>
#include <fstream>int main() {std::ifstream inFile("example.bin", std::ios::binary);if (inFile.is_open()) {int numbers[5];inFile.read(reinterpret_cast<char*>(numbers), sizeof(numbers));for (int num : numbers) {std::cout << num << " ";}std::cout << std::endl;inFile.close();} else {std::cerr << "Unable to open file for reading." << std::endl;}return 0;
}

        在上面的代码中,我们使用 ‘ifstream‘ 类以二进制模式打开了一个名为 ‘example.bin‘ 的文件,并从文件中读取了一个整数数组。‘reinterpret_cast<char*>(numbers)‘ 用于将整数数组的指针转换为字符指针,以便读取二进制数据。

总结

        文件操作是C++编程中的一个重要部分,通过文件的读写、文件流和二进制文件操作,程序可以实现数据的持久化存储和读取。掌握这些基本技巧,将能够处理各种类型的文件,满足不同的编程需求。希望通过本篇博客的介绍,你能更好地理解和应用C++的文件操作,为编写复杂和高效的C++程序打下坚实的基础。

下一篇:白骑士的C++教学高级篇 3.2 多线程与并发​​​​​​​

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

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

相关文章

嵌入式香橙派人工智能AI开发板详细操作与远程聊天实现

大家好&#xff0c;今天给大分享一个OrangePi AIpro&#xff08;20T&#xff09;采用昇腾作为主控芯片的开发板&#xff0c;开箱以及对应功能的详细实现。 第一&#xff1a;板子基本介绍 接通电源给对应的开发板上电&#xff0c;观察其中的现象&#xff0c;如下&#xff1a; 注…

基于HAL库的stm32的OLED显示屏显示(IIC)

OLED OLED&#xff0c;即有机发光二极管( Organic Light Emitting Diode )。OLED由于同时具备自发光&#xff0c;不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性&#xff0c;被认为是下一代的平面显示器…

龙国专利局瑞数6

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言(lianxi a…

富文本中提取信息并去除其中的HTML或XML标签

要从富文本中提取信息并去除其中的HTML或XML标签&#xff0c;可以使用不同的编程语言和库。以下是一些流行语言中的示例方法&#xff1a; 1. Python&#xff08;使用BeautifulSoup&#xff09; BeautifulSoup是一个强大的Python库&#xff0c;用于从HTML或XML文件中提取数据。…

巨魔商店(TrollStore)介绍与使用指南

iOS巨魔商店&#xff08;TrollStore&#xff09;介绍与使用指南 引言 在iOS系统中&#xff0c;App Store是官方唯一的应用下载渠道&#xff0c;但这也限制了用户获取非官方或破解版应用的可能性。然而&#xff0c;巨魔商店&#xff08;TrollStore&#xff09;的出现打破了这一…

配置和保护SSH

使用SSH访问远程命令行 描述Secure Shell SSH&#xff08;Secure Shell&#xff09; 是一种网络协议&#xff0c;用于在不安全的网络上安全地进行系统管理和数据传输。它最初由 Tatu Ylnen 于1995年设计&#xff0c;并成为保护网络服务免受攻击的标准。SSH提供了多种功能&…

开始构建我们自己的大语言模型:数据处理部分

关注本专栏&#xff08;NLP简论&#xff1a;手搓大语言模型实践&#xff09; 继续学习从头编写、训练自己的大语言模型。 接上集&#xff0c;本章我们将深入说一下大语言模型数据处理部分的细节&#xff0c;并直接提供本部分的完整代码。 【配套资源】 暂时的词汇表&#xff1…

GNN论文粗读

论文 文章目录 论文基于异构图的GNN论文GNN领域论文环境领域GNN论文 随缘更新 基于异构图的GNN论文 Distance Information Improves Heterogeneous Graph Neural Networks:DOI: 10.1109/TKDE.2023.3300879 转导和归纳任务&#xff0c;创新点&#xff1a;异构距离编码HDE提高GN…

关于Vue中涉及到大量数据的级联菜单树状结构的数据多选勾选页面卡顿卡死问题

项目场景&#xff1a;如题 提示&#xff1a;有个需求&#xff0c;级联菜单树状结构的数据高达3万多条&#xff0c;多选&#xff0c;只需要最后一层级value 原因分析&#xff1a;页面一下子渲染大量数据会导致浏览器内存暴涨100%&#xff0c;导致页面卡死&#xff0c;而且eleme…

常见Linux目录和配置文件

目录 /boot/&#xff1a;开机配置文件&#xff0c;也是存放核心vmlinuz的地方 /bin/&#xff1a;系统可执行文件目录&#xff0c;CentOS7后合并到/usr/bin中&#xff0c;并链接过去 /sbin/&#xff1a;系统管理员常用指令存放目录&#xff0c;例如开关机、磁盘分区等指令&am…

基于SpringBoot+Vue的广场舞团系统(带1w+文档)

基于SpringBootVue的广场舞团系统(带1w文档) 基于SpringBootVue的广场舞团系统(带1w文档) 广场舞团&#xff0c;为用户随时随地查看广场舞团信息提供了便捷的方法&#xff0c;更重要的是大大的简化了管理员管理广场舞团信息的方式方法&#xff0c;更提供了其他想要了解广场舞团…

基于Trace的类型特化动态语言JIT编译

文章目录 Explain一、简介二、一个跟踪运行的示例三、跟踪树3.1 Traces类型特化&#xff08;Type specialization&#xff09; 3.2 Trace Trees3.3 黑名单&#xff08;Blacklisting&#xff09; 四、嵌套跟踪树4.1 Nesting Algorithm4.2 Blacklisting with Nesting 五、跟踪树优…

Java NIO 面试题及答案整理,最新面试题

Java NIO中的Buffer有哪些主要类型? Java NIO中的Buffer用于与NIO通道进行交互,作为基本的数据容器。主要类型包括: 1、ByteBuffer: 最常用的类型,用于存储字节数据。 2、CharBuffer: 用于存储字符数据。 3、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、Short…

【Pytorch】一文向您详细介绍 torch.randn_like()

&#x1f389;&#x1f525;【Pytorch】一文向您详细介绍 torch.randn_like() &#x1f525;&#x1f389; 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; …

滑动窗口题目

题目描述&#xff1a; 计算两个字符串str1和str2在给定的含有n个元素的字符串数组strs中出现的最短距离。 详细解释&#xff1a; 定义整数变量n&#xff0c;用于存储字符串数组strs的长度。定义一个vector<string>类型的变量strs&#xff0c;用于存储输入的字符串。定义…

破解反爬虫策略 /_guard/auto.js(一) 原理

背景 当用代码或者postman访问一个网站的时候&#xff0c;访问他的任何地址都会返回<script src"/_guard/auto.js"></script>&#xff0c;但是从浏览器中访问显示的页面是正常的&#xff0c;这种就是网站做了反爬虫策略。本文就是带大家来破解这种策略&…

轻松搞定一键切换主题色?分享 1 段优质 CSS 代码片段!

本内容首发于工粽号&#xff1a;程序员大澈&#xff0c;每日分享一段优质代码片段&#xff0c;欢迎关注和投稿&#xff01; 大家好&#xff0c;我是大澈&#xff01; 本文约 800 字&#xff0c;整篇阅读约需 1 分钟。 今天分享一段优质 CSS 代码片段&#xff0c;轻松实现一键切…

4.3 最小二乘近似

一、最小二乘解 A x b A\boldsymbol x\boldsymbol b Axb 经常无解&#xff0c;一般是因为方程太多了。矩阵 A A A 的行比列要多&#xff0c;即方程要多余未知数&#xff08; m > n m>n m>n&#xff09;。 n n n 个列只能张成 m m m 空间的一小部分&#xff0c;除非…

spring中的依赖注入

文章目录 spring中的依赖注入一、Autowired二、Qualifier三、Resource四、总结 spring中的依赖注入 这里主要讲述三个注解装配 一、Autowired 作用&#xff1a;自动按照类型注入。只要容器中唯一的一个bean对象类型和要注入的变量类型匹配&#xff0c;就可以注入成功。 如果i…

MySQL5.7社区版本在CentOS7系统上的安装

MySQL5.7社区版本在CentOS7系统上的安装 1.配合yum仓库 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm 2.使用yum安装MySQL5.7 yum -y install mysql-community-server 3.安装…