当前位置: 首页 > news >正文

C++(21):fstream的读取和写入

目录

1  ios::out

2 ios::in和is_open

3 put()方法

4 get()方法 

4.1 读取单个字符 

4.2 读取多个字符

4.3 设置终结符

5 getline()


1  ios::out

       打开文件用于写入数据。如果文件不存在,则新建该文件;如果文件原来就存在,则打开时清除原来的内容。

#include <fstream>
#include <iostream>using namespace std;    //引入整个命名空间int main()
{fstream file;file.open("test.txt",ios::out);if (!file.is_open()){cout << "文件打开失败!" << endl;return 0;}return 0;
}

        项目文件内不存在test.txt文件,则运行后生成。

2 ios::in和is_open

        ios::in:打开文件用于读取数据。如果文件不存在,则打开出错

         is_open :用于检查文件流是否成功打开并关联到文件。它返回一个布尔值,指示文件是否已打开。

        如果将ios::out换成ios::in,则会提示文件打开失败。 

3 put()方法

        当 fstream 文件流对象调用 put () 方法时,该方法的功能就变成了向指定文件中写入单个字符。 put () 方法的语法格式如下: 其中,括号内用于指定要写入文件的字符。 该方法会返回一个调用该方法的对象的引用形式。

#include <fstream>
#include <iostream>using namespace std;int main()
{fstream file;file.open("test.txt",ios::out);file.put('c');char c = 'w';file.put(c);file.close();return 0;
}

4 get()方法 

         fstream是C++标准库中用于文件输入输出的类,它继承自iostreamget()方法是fstream(以及其基类istream)提供的一个常用成员函数,主要用于从文件或输入流中读取字符

注意:

        ios:in | ios::out:打开已存在的文件,既可读取其内容,也可向其写入数据。文件刚打开时,原有内容保持不变,如果文件不存在,则打开出错。 

4.1 读取单个字符 

#include <fstream>
#include <iostream>using namespace std;int main()
{fstream file;file.open("test.txt",ios::in | ios::out);if (!file.is_open()){cout << "文件打开失败!" << endl;return 0;}char n;n = file.get();cout << n;n = file.get();cout << n;n = file.get();cout << n;file.close();return 0;
}

4.2 读取多个字符

        首先在test.txt文件存入多行字符。

        遇到分隔符时停止读取,但分隔符不会被提取。

#include <fstream>
#include <iostream>using namespace std;int main()
{fstream file;file.open("test.txt",ios::in || ios::out);if (!file.is_open()){cout << "文件打开失败!" << endl;return 0;}char str[4][1024] = { 0 };//get方法读到换行符就停止了,所以每读完一行需要把该行的换行符读掉file.get(str[0],1024);//读取第1行file.get();file.get(str[1], 1024);//读取第2行file.get();file.get(str[2], 1024);//读取第3行file.get();file.get(str[3], 1024);//读取第4行for (int i = 0; i < 4; i++){cout << str[i] << endl;}file.close();return 0;
}

4.3 设置终结符

        get()支持人为设置终结符。

	file.get(str[0], 1024, 't');//设置终结符为‘t’,读到t停止cout << str[0];

5 getline()

        类似get(),但会提取并丢弃分隔符。

#include <fstream>
#include <iostream>using namespace std;int main()
{fstream file;file.open("test.txt",ios::in || ios::out);if (!file.is_open()){cout << "文件打开失败!" << endl;return 0;}char str[4][1024] = { 0 };for (int i = 0; i < 4; i++){file.getline(str[i], 1024);//整行读取,排除终结符}for (int i = 0; i < 4; i++){cout << str[i] << endl;}file.close();return 0;
}

相关文章:

  • StarRocks Community Monthly Newsletter (Apr)
  • 系统性能不达标,如何提升用户体验?
  • 嵌入式学习的第二十二天-数据结构-栈+队列
  • NC016NC017美光固态芯片NC101NC102
  • LLMs:《POE报告:2025年春季人工智能模型使用趋势》解读
  • 服务器防文件上传手写waf
  • 【每日一题丨2025年5.12~5.18】排序相关题
  • LeeCode 101.对称二叉树
  • 互联网大厂Java面试场景:从缓存到容器化的技术问答
  • H2数据库源码学习+debug, 数据库 sql、数据库引擎、数据库存储从此不再神秘
  • 代码随想录算法训练营第六十六天| 图论11—卡码网97. 小明逛公园,127. 骑士的攻击
  • OpenAI推出Codex — ChatGPT内置的软件工程Agents
  • (三)MMA(KeyCloak身份服务器/OutBox Pattern)
  • Git基础原理和使用
  • 一个stm32工程从底层上都需要由哪些文件构成
  • 鸿蒙AI开发:10-多模态大模型与原子化服务的集成
  • C++23:修正常量迭代器、哨兵和范围
  • 【NLP 75、如何通过API调用智谱大模型】
  • Spark,连接MySQL数据库,添加数据,读取数据
  • 【自然语言处理与大模型】向量数据库技术
  • 多家国有大行存款利率即将迎来新一轮下调
  • 张宇祥已任上海闵行区委常委、副区长
  • 中国证监会副主席李明:目前A股估值水平仍处于相对低位
  • 美国务卿与以色列总理通话,讨论加沙局势
  • 摄影师|伊莎贝尔·穆尼奥斯:沿着身体进行文化溯源
  • 以军证实空袭也门多个港口