C++ 文件操作-文本文件-读取和打开文件方法详解

读文件步骤

#include <iostream>
using namespace std;
#include <fstream>
#include <string>
//文本文件 读文件

void test(){
    
    // 1 包含头文件

    // 2 创建流对象
    ifstream ifs;

    // 3 打开文件 并且判断是否打开成功
    ifs.open("table.txt",ios::in); //文件名+打开方式
    //判断
    if (!ifs.is_open()) {
      cout << "文件打开失败" << endl;
      return; //如果打开文件失败,就不再往下进行
    }

    // 4 读数据 4种方式,推荐前三种


/*     //方式一
    char buf[1024] = {0}; //创建一个字符数组,全部初始化为0,用以保存读到的文件数据

    //table.txt只有三行数据,用while循环,将ifs中的数据通过右移运算符 >> 放到buf中

    while (ifs >> buf) {   //当数据一行一行全部读到手即退出循环
      cout << buf << endl; //查看数据是否一行一行读进去。
    } */


/*     //方式二
    char buf[1024] = {0};
    //利用ifs里面的成员函数getline(获取一行)  
    while(ifs.getline(buf,sizeof(buf))){//getline 第一个参数为存放数据的地址,第二个参数为最多需要读取多少字节数,此处我们准备1024个字节空间
      cout << buf << endl;
    } */


/*     //方式三
    string buf;//将数据存放到c++ 中的字符串中
    while (getline(ifs,buf)) //使用全局的getline()函数,其里面第一个参数代表输入流对象,第一个参数代表准备好的字符串,每次读取一行内容到buf
    {
        cout << buf << endl;
    } */

    //方式四,逐个字符读效率低,不推荐使用
    char c; //逐个字符的读取,放入c中
    while ((c = ifs.get())!= EOF)   //get()函数通过循环每次就读一个字符,并将读到的字符放到c中,最后判断是否读到文件尾EOF(end of file),如果没有继续读,读到则退出。
    {
        cout<< c;
    }
    

    // 5 关闭文件
    ifs.close();
}



int main(){
    test();
    return 0;
}

补充

ifstream类的对象创建成功的时候会返回非空值,借此判断是否创建文件对象成功

写法一:


#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main() {
  //   const string table = "table1.txt"; //open filed
  //   可执行程序目录下没有此文件
  const string table = "table.txt";
  //打开文件方式一:
  //   ifstream ifs(table);//利用构造函数打开文件,打开模式默认ios::in

  //打开文件方式二:
  ifstream ifs;             //先创建流对象,不先绑定文件
  ifs.open(table, ios::in); //通过流对象中的open()函数打开文件 文件名称+打开模式

  if (!ifs) {               //判断打开文件是否成功
    cout << "open filed" << endl;
  } else {
    string buf; //创建字符串存取读到的数据
    while (getline(ifs, buf)) {
      cout << buf << endl; //一行一行读取到buf中,遇到空格会跳跃
    }
    ifs.close(); //读取完毕关闭文件
  }
  return 0;
}
写法二:


#include <iostream>
#include <fstream> // 包含fstream头文件
using namespace std;
 
int main() {
//读文件时 定义流对象,也可以通过构造函数打开文件,打开模式默认ios::in
    ifstream file("table.txt"); // 打开名为"table.txt"的文本文件 文件名可以相对也可以绝对
    //判断是否打开文件写法另一种写法  if(!file){cout<<"open fail"<<endl;}

    if (file) { // 如果成功打开了文件
        string line;
        
        while(getline(file, line)) { // 逐行读取文件内容并存入字符串变量line中
            cout << line << endl; // 输出每一行内容到控制台
        }
        
        file.close(); // 关闭文件
    } else {
        cerr << "无法打开文件!" << endl; // 若无法打开文件则输出错误信息
    }
    
    return 0;
}

打开文件方式补充说明 1

打开文件的放法:

打开文件方式补充说明 2

//打开文件
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    ifstream inFile;          //流类ifstream 建立读取数据的文件流对象
    inFile.open("c:\\tmp\\test.txt", ios::in);   //调用流对象的 open 成员函数打开准备读取的
//文件。参数是文件名和打开模式                   
    if (inFile)  //判断流对象名的表达式,若果为真true,条件成立,则说明文件打开成功
        inFile.close();   //关闭文件时,调用文件流对象的 close 成员函数即可。 
    else
        cout << "test.txt doesn't exist" << endl;
    ofstream oFile;       //流类ofstream  建立写入数据的文件流对象
    oFile.open("test1.txt", ios::out);      //调用流对象的 open 成员函数打开准备写入数据的文
//件。参数是文件名和打开模式                   
    if (!oFile)  //判断流对象名的表达式,条件成立(PS:注意此处是!非),则说明文件打开出错
        cout << "error 1" << endl;
    else
        oFile.close();  //关闭文件时,调用文件流对象的 close 成员函数即可。
    oFile.open("tmp\\test2.txt", ios::out | ios::in);  //第二个参数打开模式是  打开已存在的
//文件,既可读取其内容,也可向其写入数据。文件刚打开时,原有内容保持不变。如果文件不存在,则打开
//出错。
    if (oFile)  //条件成立,则说明文件打开成功
        oFile.close();
    else
        cout << "error 2" << endl;
    fstream ioFile;    //流类fstream
    ioFile.open("..\\test3.txt", ios::out | ios::in | ios::trunc);//第二参数打开模式是   打
//开文件,既可读取其内容,也可向其写入数据。如果文件本来就存在,则打开时清除原来的内容;如果文件
//不存在,则新建该文件。
    if (!ioFile)
        cout << "error 3" << endl;
    else
        ioFile.close();
    return 0;
}

读取ini类型配置文件

C++读取配置文件的基本步骤如下:

  1. 使用标准库中的fstream头文件打开配置文件;

  2. 逐行读取文件内容,根据具体需求解析每一行数据;

  3. 关闭文件。

以下是一个简单的示例代码:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
    // 打开配置文件
    ifstream config_file("config.txt");
    if (!config_file.is_open())
    {
        cerr << "Failed to open config file." << endl;
        return -1;
    }
    // 逐行读取并解析数据
    string line;
    while (getline(config_file, line))
    {
        // 如果是注释或空行,则忽略
        if (line.empty() || line[0] == '#')
            continue;
        // 解析key-value对
        size_t pos = line.find('=');
        if (pos != string::npos)
        {
            string key = line.substr(0, pos);
            string value = line.substr(pos + 1);
            cout << "Key: " << key << ", Value: " << value << endl;
        }
    }
    // 关闭文件
    config_file.close();
    return 0;
}

在这个示例中,我们假设配置文件中的每一行都是形如“key=value”的格式,程序会读取并输出每一对键值对。其中,“#”开头的行视为注释或空行,会被忽略。

本文仅为学习回顾,对基础代码做记录。

参考:62 C++文件操作-文本文件-读文件_哔哩哔哩_bilibili 

c++:文件操作1 文件的打开_c++打开文件-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源博客项目Blog .NET Core源码学习(9:Autofac使用浅析)

开源博客项目Blog使用Autofac注册并管理组件和服务&#xff0c;Autofac是面向.net 的开源IOC容器&#xff0c;支持通过接口、实例、程序集等方式注册组件和服务&#xff0c;同时支持属性注入、方法注入等注入方式。本文学习并记录Blog项目中Autofac的使用方式。   整个Blog解…

Window部署SkyWalking

SkyWalking mysql的驱动依赖 选择下载版本 v9.4 现在后解压缩目录结构 一、修改config目录文件 application.yml 修改1&#xff1a; selector: ${SW_STORAGE:h2} 修改后&#xff1a; selector: ${SW_STORAGE:mysql} 修改2&#xff1a;使用mysql数据库 mysql: properti…

【前端素材】推荐优质后台管理系统GramOs平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;它通常作为一个独立的后台界面存在&#xff0c;供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能&#xff1a; 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

Eureka注册中心(黑马学习笔记)

Eureka注册中心 假如我们的服务提供者user-service部署了多个实例&#xff0c;如图&#xff1a; 大家思考几个问题&#xff1a; order-service在发起远程调用的时候&#xff0c;该如何得知user-service实例的ip地址和端口&#xff1f; 有多个user-service实例地址&#xff0c…

java数据结构与算法刷题-----LeetCode404. 左叶子之和

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路 深度优先遍历&#xff0c;或者广度优先向下遍历时&#xff0c;如…

大数据揭秘:Hadoop短视频流量分析实战

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

2024 Sora来了!“手机Agent智能体”也来了!

近日&#xff0c;Open AI发布了能够根据文本生成超现实视频的工具Sora&#xff0c;多款震撼视频引爆科技圈刷屏&#xff0c;热度持续发酵占据AI领域话题中心&#xff0c;被认为是AGI实现过程里的重大里程碑事件。新一轮的人工智能浪潮给人类未来的生产和生活方式带来巨大而深远…

【Kotlin】流程控制

1 选择结构 Kotlin 中选择结构主要包含 if -else、when 语句&#xff0c;并且可以返回结果。 1.1 if-else 1.1. 条件选择 fun main() {var score 85if (score > 90) {println("优秀")} else if (score > 80) {println("良好")} else if (score &…

十九、图像的放缩和插值

项目功能实现&#xff1a;对一张图像进行放大和缩小操作 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 resizing.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class RESIZING { public:void resizing(Mat& image); };#pragma…

【EndNote20】Endnote20和word的一些操作

文章目录 前言一、如何导入参考文献到EndNote201.1.在谷歌学术或知网上下载文献1.2.将下载好的文件导入EndNote20(可批量导入)1.3.书籍如何导入 二、Word中加入参考文献 前言 做毕设时学习了EndNote20的一些使用方法&#xff0c;并在此慢慢做汇总。 一、如何导入参考文献到End…

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测 目录 分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进的麻雀搜索算法优化最小二乘支持向量机故障诊断分类预测分类效果基本描述程序设计参考资…

手拉手Vite+Vue3+TinyVue+Echarts+TailwindCSS

技术栈springboot3hutool-alloshi-coreVue3viteTinyVueEchartsTailwindCSS软件版本IDEAIntelliJ IDEA 2022.2.1JDK17Spring Boot3.1hutool-all5.8.18oshi-core6.4.1Vue35.0.10vite5.0.10axios1.6.7echarts5.4.3 ECharts是一个使用 JavaScript 实现的开源可视化库&#xff0c;可…

AndroidStudio 2024-2-21 Win10/11最新安装配置(Kotlin快速构建配置,gradle镜像源)

AndroidStudio 2024 Win10/11最新安装配置 教程目的&#xff1a; (从安装到卸载) &#xff0c;针对Kotlin开发配置&#xff0c;gradle-8.2-src/bin下载慢&#xff0c;以及Kotlin构建慢的解决 好久没玩AS了,下载发现装个AS很麻烦,就觉得有必要出个教程了(就是记录一下:嘻嘻) 因…

python + selenium/appnium

Selenium 的自动化原理: selenium 自动化流程: 自动化程序调用Selenium 客户端库函数&#xff08;比如点击按钮元素&#xff09;客户端库会发送Selenium 命令 给浏览器的驱动程序浏览器驱动程序接收到命令后 ,驱动浏览器去执行命令浏览器执行命令浏览器驱动程序获取命令执行的…

封装(encapsulation)

封装[encapsulation] 封装介绍封装好处封装的实现步骤&#xff08;三步&#xff09;入门案例封装与构造器 封装介绍 封装就是把抽象的数据[属性]和对数据的操作[方法]封装在一起&#xff0c;数据被保护在内部&#xff0c;程序的其它部分只有通过被授权的操作[方法]&#xff0c;…

每天一个知识点 - 如何快速熟悉后端项目

入职一家新公司的时候&#xff0c;不可避免的就是接触到新公司的项目&#xff0c;有些项目一启动就是好几年&#xff0c;业务功能极其复杂&#xff0c;下面我总结几个方法让大家快速熟悉后端项目&#xff08;图文结合&#xff09; 用例图简析 用例是系统中的一个功能单元&…

智慧应急:提升灾害防范与应对能力的关键之举

目录 一、引言 二、智慧应急的内涵与特点 三、智慧应急在灾害防范中的应用 1、风险评估与监测预警 2、应急预案制定与演练 3、灾害风险宣传与教育 四、智慧应急在灾害应对中的应用 1、快速响应与决策支持 2、资源优化与调配 3、灾后恢复与重建 五、智慧应急面临的挑…

运维SRE-19 网站Web中间件服务-http-nginx

Ans自动化流程 1.网站集群核心协议&#xff1a;HTTP 1.1概述 web服务&#xff1a;网站服务&#xff0c;网站协议即可. 协议&#xff1a;http协议,https协议 服务&#xff1a;Nginx服务&#xff0c;Tengine服务....1.2 HTTP协议 http超文本传输协议&#xff0c;负责数据在网站…

NXP实战笔记(七):S32K3xx基于RTD-SDK在S32DS上配置ICU输入捕获

目录 1、概述 2、输入捕获SDK配置 2.1、SAIC中断方式 2.2、IPWM或者IPM 1、概述 输入捕获&#xff0c;可以抓取高电平时间、低电平时间、占空比、周期、边沿检测与回调函数、边沿计数&#xff08;ABZ解码&#xff09;、时间戳、唤醒中断。 记录一下根据Emios模块实现上述部分…

应对电脑重新分区文件消失:预防措施、常见成因与恢复关键要点

电脑重新分区文件不见了是一个常见的问题&#xff0c;通常发生在用户对硬盘进行重新分区、格式化或操作系统重装过程中&#xff0c;可能导致已存在的文件和数据暂时不可见或永久丢失。 **预防文件丢失的方法&#xff1a;** 1. **提前备份**: 在进行任何重大磁盘操作前&#xff…