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::inifstream 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 成员函数即可。 elsecout << "test.txt doesn't exist" << endl;ofstream oFile;       //流类ofstream  建立写入数据的文件流对象oFile.open("test1.txt", ios::out);      //调用流对象的 open 成员函数打开准备写入数据的文
//件。参数是文件名和打开模式                   if (!oFile)  //判断流对象名的表达式,条件成立(PS:注意此处是!非),则说明文件打开出错cout << "error 1" << endl;elseoFile.close();  //关闭文件时,调用文件流对象的 close 成员函数即可。oFile.open("tmp\\test2.txt", ios::out | ios::in);  //第二个参数打开模式是  打开已存在的
//文件,既可读取其内容,也可向其写入数据。文件刚打开时,原有内容保持不变。如果文件不存在,则打开
//出错。if (oFile)  //条件成立,则说明文件打开成功oFile.close();elsecout << "error 2" << endl;fstream ioFile;    //流类fstreamioFile.open("..\\test3.txt", ios::out | ios::in | ios::trunc);//第二参数打开模式是   打
//开文件,既可读取其内容,也可向其写入数据。如果文件本来就存在,则打开时清除原来的内容;如果文件
//不存在,则新建该文件。if (!ioFile)cout << "error 3" << endl;elseioFile.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博客

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

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

相关文章

VS 2015 发布 WebService

本文介绍了使用VS2015发布WebService的步骤 右键项目点击发布 选择文件系统和目标位置 配置选择Debug-Any CPU&#xff08;选其他也可以&#xff09; 4. 点击发布&#xff0c;在对应文件夹中可以看到发布出来的内容。 记录遇到的问题&#xff0c; 发布前要选择删除所有现有文…

使用MongoDB数据库和Mongoose库在Node.js中进行数据存储

在Node.js中使用MongoDB数据库和Mongoose库进行数据存储是前端开发中常用的技术之一。MongoDB是一种非关系型数据库&#xff0c;具有高性能、易扩展等优点&#xff1b;而Mongoose是在Node.js中对MongoDB进行操作的框架&#xff0c;简化了数据库操作&#xff0c;并提供了丰富的功…

Js的 Promise的 then catch 笔记240222

Js的 Promise的 then catch 笔记240222 基本用法 new Promise(f>{setTimeout(ev>{f("一秒后输出控制台");},1000); }).then(f的参数>{console.log(f的参数); }); // 控制台输出: 一秒后输出控制台上面代码中, f 的标准名叫做 resolve , 所以应该写成 new …

知识图谱数据处理流程是什么

在当今信息时代&#xff0c;数据已经成为企业决策和业务发展的重要驱动力。然而&#xff0c;随着数据量的不断增加&#xff0c;传统的数据处理方法已经难以满足需求。知识图谱作为一种新兴的技术&#xff0c;正逐渐成为处理大规模数据的关键工具。本文将深入探讨知识图谱的数据…

写代码中的一些“小技巧”

目录 前言 1.不注重代码格式 1.1 空格 1.2 换行 2.随意的命名 2.1 有意义的参数名 2.2 见名知意 2.3 参数名风格一致 3.出现大量重复代码 4.从不写注释 5.方法过长 6.参数过多 7.代码层级太深 8.判断条件太多 9.硬编码 10.事务过大 11.在循环中远程调用 11.1 …

CSS 面试题汇总

CSS 面试题汇总 1. 介绍下 BFC 及其应 参考答案&#xff1a; 参考答案&#xff1a; 所谓 BFC&#xff0c;指的是一个独立的布局环境&#xff0c;BFC 内部的元素布局与外部互不影响。 触发 BFC 的方式有很多&#xff0c;常见的有&#xff1a; 设置浮动overflow 设置为 auto、scr…

【力扣hot100】刷题笔记Day10

前言 一鼓作气把链表给刷完&#xff01;&#xff01;中等题困难题冲冲冲啊啊啊&#xff01; 25. K 个一组翻转链表 - 力扣&#xff08;LeetCode&#xff09; 模拟 class Solution:def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:# 翻转…

#LLM入门|Prompt#1.7_文本拓展_Expanding

输入简短文本&#xff0c;生成更加丰富的长文。 “温度”&#xff08;temperature&#xff09;&#xff1a;控制文本生成的多样性。 一、定制客户邮件 根据客户的评价和其中的情感倾向&#xff0c;使用大语言模型针对性地生成回复邮件。将大大提升客户满意度。 # 我们可以在…

两种动态代理(可以看到代理类的样子,方便理解)

这里写目录标题 jdk动态代理例子CGlib动态代理例子手写spring中的事务部分自定义注解版aop实现方式 Spring的两大重点&#xff0c;IOC和AOP&#xff0c;今天我们就来学AOP&#xff0c;众所周知AOP的底层是动态代理&#xff0c;让我们看一下这两种动态代理的区别。 例子&#x…

【结合OpenAI官方文档】解决Chatgpt的API接口请求速率限制

OpenAI API接口请求速率限制 速率限制以五种方式衡量&#xff1a;RPM&#xff08;每分钟请求数&#xff09;、RPD&#xff08;每天请求数&#xff09;、TPM&#xff08;每分钟令牌数&#xff09;、TPD&#xff08;每天令牌数&#xff09;和IPM&#xff08;每分钟图像数&#x…

BUUCTF第二十四、二十五题解题思路

目录 第二十四题CrackRTF 第二十五题[2019红帽杯]easyRE1 第二十四题CrackRTF 查壳 无壳&#xff0c;32位&#xff0c;用32位IDA打开&#xff0c;打开后的main函数很短&#xff0c;可以找到一句“jmz _main_0”——跳转到 _main_0&#xff0c;说明真正的主函数是_main_0&am…

React 模态框的设计(二)

自定义组件是每个前端开发者必备的技能。我们在使用现有框架时难免有一些超乎框架以处的特别的需求&#xff0c;比如关于弹窗&#xff0c;每个应用都会用到&#xff0c;但是有时我们使用的框架中提供的弹窗功能也是功能有限&#xff0c;无法满足我们的应用需求&#xff0c;今天…

隐藏饿了么el-select组件的el-select-dropdown部分,只使用el-select的显示框

隐藏饿了么el-select组件的el-select-dropdown部分,只使用el-select的显示框 问题: 由于el-select组件的el-select-dropdown部分是自动插入在最外层Body上的&#xff0c;所以在当前组件的scoped中让el-select-dropdown组件display:none不会生效所以需要&#xff1a; :popper-…

TiDB 7.5.0 LTS 高性能数据批处理方案

过去&#xff0c;TiDB 由于不支持存储过程、大事务的使用也存在一些限制&#xff0c;使得在 TiDB 上进行一些复杂的数据批量处理变得比较复杂。 TiDB 在面向这种超大规模数据的批处理场景&#xff0c;其能力也一直在演进&#xff0c;其复杂度也变得越来越低&#xff1a; ○ 从…

11.CSS3的媒介(media)查询

CSS3 的媒介(media)查询 经典真题 如何使用媒体查询实现视口宽度大于 320px 小于 640px 时 div 元素宽度变成 30% 媒体查询 媒体查询英文全称 Media Query&#xff0c;顾名思义就是会查询用户所使用的媒体或者媒介。 在现在&#xff0c;网页的浏览终端是越来越多了。用户可…

C++:string类

标准库中的string类 string类 1. 字符串是表示字符序列的类 2. 标准的字符串类提供了对此类对象的支持&#xff0c;其接口类似于标准字符容器的接口&#xff0c;但添加了专门用于操作单字节字符字符串的设计特性。 3. string类是使用char(即作为它的字符类型&#xff0c;使用…

ChatGPT 是什么

文章目录 一、ChatGPT 是什么二、ChatGPT的发明者三、ChatGPT的运作方式四、ChatGPT的技术五、ChatGPT的优势六、ChatGPT的局限性七、ChatGPT的应用八、ChatGPT的未来九、总结 一、ChatGPT 是什么 OpenAI的ChatGPT&#xff0c;即Chat Generative Pre-Trained Transformer&…

3个精美的wordpress企业网站模板

WordPress企业网站模板 https://www.zhanyes.com/qiye/6305.html WordPress企业官网模板 https://www.zhanyes.com/qiye/6309.html WordPress律师模板 https://www.zhanyes.com/qiye/23.html

SQL注入漏洞解析--less-2

首先我们进入第二关 思路&#xff1a; 1.先判断是什么类型的注入 2.根据类型我们在找注入点 步骤&#xff1a; 1.提示我们输入id数字&#xff0c;那我们先输入1猜一下 2.这里正常回显&#xff0c;当我们后边加上时可以看到报错&#xff0c;且报错信息看不到数字&#xff0…

轻松掌握opencv的8种图像变换

文章目录 opencv的8种图像变换1. 图像放大、缩小2. 图像平移3. 图像旋转4. 图像仿射变换5. 图像裁剪6. 图像的位运算&#xff08;AND, OR, XOR&#xff09;7. 图像的分离和融合8. 图像的颜色空间 opencv的8种图像变换 1. 图像放大、缩小 我们先看下原图 import cv2 import ma…