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

news2024/12/26 22:38:13

目录

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.coloradmin.cn/o/1614996.html

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

相关文章

关于 Windows10 计算机丢失 MSVCP120.dll 的解决方法

今天学长跟平时一样打开电脑开始发布文章需要用到Adobe Photoshop CC 2018的时候居然给我来个Photoshop.exe-系统错误、无法启动此程序&#xff0c;因为计算机中丢失MSVCP120.dll 尝试重新安装该程序以解决此问题&#xff0c;安装上面的说明重新安装了我的Photoshop CC 打开还是…

移动端不居中问题/安卓和ios下line-height上下居中 css兼容问题

移动端开发过程&#xff0c;经常会写带0.5px边框角标类的样式&#xff0c;直接使用border设置0.5px边框&#xff0c;ios有些机型会出现显示不完整的情况。所以改用伪元素方法实现边框。代码如下&#xff1a; .comment-entry::after{content: ;position: absolute;left: 0;top: …

MySQL主从复制实现高可用性和负载均衡

大家好&#xff0c;我是咕噜铁蛋&#xff0c;今天我想和大家聊聊MySQL主从复制如何帮助我们实现高可用性和负载均衡。在如今的大数据时代&#xff0c;数据库的稳定性和性能成为了企业关注的重点&#xff0c;而MySQL主从复制正是解决这两个问题的重要工具。 一、MySQL主从复制简…

论21世纪的婚姻

什么是婚姻&#xff1f; 婚姻是一种社会与法律制度认可的男女两性基于感情自愿结成夫妻关系的社会组织形式&#xff0c;婚姻在百度百科上是这样回答的&#xff0c;通俗来说是两个人在民政局领结婚证后所组成为一个家庭。然而我认为这个是有水分的&#xff0c;在我看来&#xff…

混淆原理与实践指南

引言 &#x1f680; 在当今的软件开发领域&#xff0c;保护代码的安全性和保密性变得越来越重要。混淆&#xff08;Obfuscation&#xff09;技术作为一种保护代码的手段&#xff0c;在应对逆向工程和代码盗用方面发挥着关键作用。本文将深入探讨混淆的原理&#xff0c;以及如何…

文件上传服务器、文件展示等异步问题

问题&#xff1a; 文件上传模块&#xff1a;当文件已经上传完成&#xff0c;文件进度已经走完了&#xff0c;但是服务器响应还没有返回结果&#xff0c;出现了&#xff0c;获取不到上传后的文件路径&#xff0c;需要等待服务器返回结果后&#xff0c;才能获取文件路径并点击跳…

FPGA - ZYNQ 基于Axi_Lite的PS和PL交互

前言 在FPGA - ZYNQ 基于EMIO的PS和PL交互中介绍了ZYNQ 中PS端和PL端交互的开发流程&#xff0c;接下来构建基于基于Axi_Lite的PS和PL交互。 开发流程 Axi_Lite从机 在FPGA - AXI4_Lite&#xff08;实现用户端与axi4_lite之间的交互逻辑&#xff09;中&#xff0c;详解介绍…

weblogic反序列化漏洞(CVE-2017-10271)复现

直接用vuluhub搭建现成的靶场做 访问靶场 打开是这样表示成功 想反弹shell 就先开启kali1的nc监听&#xff0c;这就监听2233端口吧 linux&#xff1a;nc -l -p 2233 抓包修改为攻击数据包 ip和端口可以任意修改 反弹的shell 还可以写入文件shell 只需要把提供的poc POS…

4.10 SpringBoot整合Servlet、Filter过滤器和Listener

4.10 整合Servlet、Filter和Listener 1. 启动类1. 整合Servlet2. Filter过滤器3. Listener监听器4. 总结5. JavaWeb三大组件**************************************************** 一般情况下&#xff0c;使用Spring、Spring MVC这些框架之后&#xff0c;基本上就告别Servlet、…

# 从浅入深 学习 SpringCloud 微服务架构(三)注册中心 Eureka(1)

从浅入深 学习 SpringCloud 微服务架构&#xff08;三&#xff09;注册中心 Eureka&#xff08;1&#xff09; 段子手168 1、微服务的注册中心 注册中心可以说是微服务架构中的”通讯录”&#xff0c;它记录了服务和服务地址的映射关系。 在分布式架构中服务会注册到这里&am…

【HCIP学习】重发布和路由策略

一、重发布&#xff08;路由引入&#xff09; 1、背景&#xff1a; 一个网络拓扑中存在多种不同的路由协议&#xff0c;为了使多种不同的路由协议间能相互通信&#xff0c;出现了路由引入 为啥会存在多种不同的网络&#xff1f; 例如&#xff1a;OSPF由于区域架构的限制&am…

web前端 html5+css3相关知识点(跟着黑马学)8

先总结一下网页常见的布局方式&#xff1a; 1. 标准流 块级元素独占一行 -> 垂直布局 行内元素/行内块元素一行显示多个 -> 水平布局 2. 浮动 可以让原本垂直布局的块级元素变成水平布局。 3. 定位 可以让元素自由的摆放在网页的任意位置 一般用于盒子之间的层叠…

【RAG 论文】WikiChat:从 WikiPedia 检索数据来提高 LLM 的事实性的聊天机器人

论文&#xff1a;WikiChat: Stopping the Hallucination of Large Language Model Chatbots by Few-Shot Grounding on Wikipedia ⭐⭐⭐⭐ Stanford University, EMNLP 2023 相关地址&#xff1a; demo 体验地址CodeHuggingface 模型 文章目录 论文速读模型 demo一些其他的细节…

让流程图动起来

我们平时画流程&#xff0c;然后贴到文档&#xff0c;就完事了。但是过程演示的时候&#xff0c;如果只是一张静态图&#xff0c;很难吸引到听众的注意力&#xff0c;表达效果并不太好。常用的方法是可以用PPT进行动态演示&#xff0c;做PPT也是需要花一些时间&#xff0c;同时…

[StartingPoint][Tier2]Base

Task 1 Which two TCP ports are open on the remote host? (远程服务器开放了哪两个TCP端口?) $ nmap -sC -sV 10.129.234.232 22,80 Task 2 What is the relative path on the webserver for the login page? (相关的登录页面路径是什么?) /login/login.php Task 3 …

1 transformers:词典,(文本如何处理)

0 介绍 NLP任务最初&#xff0c;就是在于如何处理文本。无论从TFIDF到word2Vec的过程&#xff0c;还是BERT都是想找到文本的向量表达&#xff0c;如何表示更好处理我们的下游任务。那么&#xff0c;这个过程是如何做的呢&#xff0c;本文主要就是介绍这一个过程&#xff0c;还是…

【C++ 多态】(一)虚函数重写✍

文章目录 1.虚函数重写的三个例外1.1协变(基类与派生类虚函数返回值类型不同)1.2析构函数的重写(基类与派生类析构函数的名字不同)1.3派生类可以不写 virtual 2.面试题✍ 1.虚函数重写的三个例外 1.1协变(基类与派生类虚函数返回值类型不同) ①&#x1f34e;协变的概念&#…

Linux学习之路 -- 进程篇 -- 进程地址空间

目录 一、背景介绍 二、进程地址空间 1.看现象 2.先简单描述一下地址空间&#xff08;地址空间全在操作系统的内部&#xff09; 3.地址空间详细一点的描述 4.进程地址空间里面的内容&#xff08;部分&#xff09; 三、进程地址空间的转换机制 1.页表 2.进程地址空间和页…

牛客NC162 二叉树中和为某一值的路径(三)【中等 dfs C++、Java、Go、PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/965fef32cae14a17a8e86c76ffe3131f 思路 既然要找所有路径上节点和等于目标值的路径个数&#xff0c;那我们肯定先找这样的路径起点啊&#xff0c; 但是我们不知道起点究竟在哪里&#xff0c; 而且任意节点都有…

Navicat 干货 | 掌握 PostgreSQL 规则语法

PostgreSQL 规则提供了一种强大的机制&#xff0c;控制查询执行并在数据库内部实施数据操作。理解规则的语法和用法对于有效利用其功能至关重要。在上周的文章中&#xff0c;我们探讨了 PostgreSQL 规则的工作原理及其与触发器的区别。今天的文章将使用免费的 “dvdrental”示例…