C++学习进阶版(二):与文件相关的函数用法

目录

1、读取文件的指定行

(1)main函数中直接读

(2)封装成函数

① 无返回值类型

② 直接返回读取的内容

2、求文件的行数

3、文件内容读取成一个字符串


1、读取文件的指定行

(1)main函数中直接读

#include <iostream>
#include <fstream>
#include <string>int main() {// 要读取的行号,例如第5行int line_number = 5;int i = 0; std::ifstream file("G:/MyCode/c++/test.dump");if (file.is_open()) {std::string line;// 从1开始计数,因为行号通常是从1开始的while (std::getline(file, line)) {++i;if (i == line_number) {// 成功读取了目标行std::cout << "Line " << line_number << ": " << line << std::endl;break; // 找到目标行后退出循环}}if (i != line_number) {std::cerr << "Could not find line " << line_number << std::endl;}file.close();} else {std::cerr << "Unable to open file" << std::endl;}return 0;
}

(2)封装成函数

① 无返回值类型

#include <iostream>
#include <fstream>
#include <string>// 函数声明,只接受行号 n 作为参数
void readSpecificLineFromFile(int n);int main() {int line_number = 5; // 要读取的行号readSpecificLineFromFile(line_number);return 0;
}// 函数定义,读取并输出第 n 行的内容
void readSpecificLineFromFile(int n) {std::ifstream file("G:/MyCode/c++/test.dump");int current_line = 0;if (file.is_open()) {std::string line;while (std::getline(file, line)) {++current_line;if (current_line == n) {std::cout << "Line " << n << ": " << line << std::endl;file.close();return;}}std::cerr << "Could not find line " << n << std::endl;file.close();} else {std::cerr << "Unable to open file" << std::endl;}
}

② 直接返回读取的内容

#include <iostream>
#include <fstream>
#include <string>
using namespace std;// 函数声明,只接受行号 n 作为参数
std::string readLineFromFile(int n);int main() {int line_number = 5; // 要读取的行号std::string line= readLineFromFile(line_number);cout << line <<endl;return 0;
}// 函数定义,读取并输出第 n 行的内容
std::string readLineFromFile(int n) {std::ifstream file("G:/MyCode/c++/test.dump");int current_line = 0;std::string line;std::string lineContent;if (!file.is_open()) {std::cerr << "Unable to open file" << std::endl;return ""; // 返回空字符串表示文件无法打开}while (std::getline(file, line)) {++current_line;if (current_line == n) {lineContent = line;break;}}file.close(); // 确保文件被关闭return lineContent; // 返回找到的行内容,或空字符串表示未找到
}

2、求文件的行数

#include <iostream>
#include <fstream>
#include <string>// 函数声明
int countLines(const std::string& filename);int main() {int lineCount = countLines("1.dump");if (lineCount > 0) {std::cout << "The file '1.dump' has " << lineCount << " lines." << std::endl;} else {std::cerr << "The file '1.dump' could not be opened or is empty." << std::endl;}return 0;
}// 函数定义
int countLines(const std::string& filename) {std::ifstream file(filename);int lineCount = 0;// 检查文件是否成功打开if (file) {std::string line;// 逐行读取文件直到文件末尾while (std::getline(file, line)) {++lineCount;}} else {// 如果文件无法打开,返回0表示没有行lineCount = 0;}// 关闭文件file.close();// 返回文件的行数return lineCount;
}

3、文件内容读取成一个字符串

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <stdexcept>// 函数声明,读取文件并将其内容合并为一个字符串
std::string readAndConcatenateDumpFile(const std::string& filename);int main() {try {std::string filename = "1.dump";  // 文件路径std::string fileContents = readAndConcatenateDumpFile(filename);// 打印文件内容,这里仅打印前100个字符作为示例std::cout << "Contents of file '" << filename << "':" << std::endl;std::cout << fileContents << std::endl;} catch (const std::runtime_error& e) {std::cerr << "Error: " << e.what() << std::endl;return 1;  // 非正常退出,返回错误码}return 0;  // 正常退出
}// 函数定义,读取文件并将其内容合并为一个字符串
std::string readAndConcatenateDumpFile(const std::string& filename) {std::ifstream file(filename);if (!file.is_open()) {throw std::runtime_error("Failed to open the dump file.");}std::stringstream ss;std::string line;while (std::getline(file, line)) {ss << line;}file.close();return ss.str();
}

最近在用C++写指令文件的解码和状态机转换,其中的一些函数,供大家参考。

后续相关的会更新在文章中。

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

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

相关文章

如何选择全链路监控系统?CAT、SkyWalking、Pinpoint哪个更适合?

如果服务器上没有应用还会造成硬件瓶颈吗&#xff1f;显然是不会的&#xff0c;呈现出来的硬件瓶颈绝大多数是表象问题&#xff0c;我们往往需要在系统应用上寻找问题的根因。而寻找系统问题的根因&#xff0c;对于系统链路监控也是必不可少的&#xff0c; 前面我们也写了几篇…

光伏无人机吊装技术的优势及应用前景

近年来随着政府对光伏业务的不断宣传和推进&#xff0c;不少区域因地制宜引进了光伏发电项目&#xff0c;但是部分区域由于交通不便利&#xff0c;给材料运输工作带来了巨大的考验。目前&#xff0c;无人机吊装技术运输材料解决这一问题。 今天带大家看下光伏无人机吊装技术有…

STM32G030F6P6TR ST意法

STM32G030F6P6TR是ST(意法半导体)一款基于高性能ArmCortex-M032位RISC内核&#xff0c;工作频率高达64MHz的32位MCU微控制器。代理销售ST(意法半导体)全系列IC电子元器件-中芯巨能为您提供STM32G030F6P6TR(ST 32位MCU)引脚图及中文参数介绍等内容。 STM32G030F6P6TR的中文参数 …

Linux进程和任务管理

目录 一.程序和进程的关系 程序 进程 线程 线程与进程的区别 二.查看进程信息ps 方法一 常用选项 方法二 三.TOP动态查看进程信息 进程信息区各列解释 top常用命令 系统查看命令总结 查看进程信息pgrep 查看进程树pstree 四.控制进程 进程的启动方式 进程的前…

Java面试八股之重写一个对象的equals方法,需要考虑哪些问题

重写一个对象的equals方法&#xff0c;需要考虑哪些问题 遵守equals()约定&#xff1a; 重写equals()方法应遵循Object类中定义的equals()方法约定&#xff0c;即实现自反性&#xff08;x.equals(x)始终为true&#xff09;、对称性&#xff08;若x.equals(y)为true&#xff0…

【电控笔记5.5】psms规格参数

规格参数 转矩常数Kt与反电动势常数Ke Kt:没安培电流产生多少转矩量 Ke或Kb:每单位转速产生的反电动势电压 反电动势是梯形波,Kt=Ke;正弦波则不相等 q轴电流与反电动势都领先转子磁通链90

谷粒商城学习笔记

1.系统架构 2.环境准备 21.安装Linux 1.VirtualBox: https://download.virtualbox.org/virtualbox/6.0.10/VirtualBox-6.0.10-132072-Win.exe 2.安装 Vagrant 1).Vagrant 下载地址: https://releases.hashicorp.com/vagrant/2.2.5/vagrant_2.2.5_x86_64.msi https://www…

7.Prism框架之对话框服务

文章目录 一. 目标二. 技能介绍① 什么是Dialog?② Prism中Dialog的实现方式③ Dialog使用案例一 (修改器)④ Dialog使用案例2(异常显示窗口) 一. 目标 1. 什么是Dialog?2. 传统的Dialog如何实现?3. Prism中Dialog实现方式4. 使用Dialog实现一个异常信息弹出框 二. 技能介…

Proxyman Premium for Mac:网络调试利器,开发者首选!

Proxyman Premium for Mac是一款功能强大的网络调试和分析工具&#xff0c;专为开发者和测试人员打造。这款软件以其出色的性能和丰富的功能&#xff0c;帮助用户在网络开发和调试过程中更有效地分析和拦截网络请求&#xff0c;进行必要的修改和重发&#xff0c;从而进行更深度…

【Linux基础】Linux基础概念

目录 前言 浅谈什么是文件&#xff1f; Linux下目录结构的认识及路径 目录结构 路径 家目录 什么是递归式的删除 重定向 输出重定向&#xff1a; 追加重定向&#xff1a; 输入重定向&#xff1a; 命令行管道 shell外壳 为什么需要shell外壳&#xff1f; shell外壳…

使用FPGA实现超前进位加法器

介绍 前面已经向大家介绍过8位逐位进位加法器了&#xff0c;今天向大家介绍4位超前进位加法器。 对于逐位进位加法器来说&#xff0c;计算任意一位的加法运算时&#xff0c;必须等到低位的加法运算结束送来进位才能运行。这种加法器结构简单&#xff0c;但是运算慢。 对于超…

NFT卡牌质押分红模式开发技术讲解分析

近年来&#xff0c;随着加密货币市场的快速发展&#xff0c;NFT&#xff08;Non-Fungible Token&#xff0c;非同质化代币&#xff09;作为一种独特的数字资产形式备受关注。其中&#xff0c;NFT卡牌质押分红模式是一种创新的应用场景&#xff0c;为用户提供了一种参与和投资的…

【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Check Box的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 按钮类控件 | Check Box的使用及说明 文章编号&#xff…

arduino使用光电开关控制电动平台回零

1.接线介绍 注意&#xff1a;NPN和PNP型光电开关的接线方式不同 首先&#xff0c;得在arduino上设置一个数字量接口&#xff0c;例如&#xff1a; #define PHOTO_SWITCH_PIN 53 // 假设光电开关连接到数字引脚53 然后根据你的情况把白色的或者黑色的线接到该引脚上&#x…

PCIe系统阻抗控制85还是100的验证

高速先生成员--周伟 还记得上次的文章&#xff0c;PCIe阻抗控制&#xff0c;85ohm和100ohm哪个好&#xff0c;文章里面只讲到目前的主要问题&#xff0c;但没有给出具体怎么解决这个问题&#xff0c;今天我们就通过无源仿真的方式来聊聊上次那个问题的最终解决方案。 目前我们看…

千锤百炼算法系列之动态规划

题外话 这段时间,我必须把算法弄明白 这篇直接讲解动态规划所有细节! 前面那篇 千锤百炼之每日算法(一)-CSDN博客 也有关于动态规划的讲解,也非常详细 很简单,我成尊不就是了?!!! 正题 动态规划 这里我们主要是让大家明白什么是动态规划,怎么用动态规划解题 我就不用…

IEC104协议

1. 简介 IEC104规约是一个广泛应用于电力、城市轨道交通等行业的国际标准。 2. 术语解释 遥脉 (电度量)&#xff1a; 是指对现场某装置所发出的脉冲信号进行周期累计的一种远程计数操作。 其实&#xff0c;遥脉也可以看成是被具体规定了采用脉冲计数作为测量方法的一种遥测…

【软考经验分享】软考-中级-嵌入式备考

这里写目录标题 教辅用书嵌入式系统设计师考试大纲嵌入式系统设计师教程嵌入式系统设计师5天修炼嵌入式系统设计师考前冲刺100题 刷题软件希赛网软考真题 视频教程希赛网王道-计组计网 教辅用书 嵌入式系统设计师考试大纲 50页左右&#xff0c;内容为罗列一些考点&#xff0c…

信息化工作人员必备常识3——nslookup命令【用来诊断域名(DNS) 基础结构的信息以及用来查看域名和IP的对应关系】

[TOC](信息化工作人员必备常识3——nslookup命令【用来诊断域名(DNS) 基础结构的信息以及用来查看域名和IP的对应关系】) 前言 信息化相关的工作人员&#xff0c;无论你是开发人员、产品经理、CIO领导&#xff0c;你只要是在做信息化相关的工作&#xff0c;有些基础知识和操作…

C#版Facefusion:让你的脸与世界融为一体!-05 人脸增强

C#版Facefusion&#xff1a;让你的脸与世界融为一体&#xff01;-05 人脸增强 目录 说明 效果 模型信息 项目 代码 下载 说明 C#版Facefusion一共有如下5个步骤&#xff1a; 1、使用yoloface_8n.onnx进行人脸检测 2、使用2dfan4.onnx获取人脸关键点 3、使用arcface_w60…