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

ifstream和ofstream分别是什么

ifstreamofstream是 C++ 标准库<fstream>中用于文件输入输出的类:

  • ifstream(input file stream):专门用于从文件中读取数据(读文件)。
  • ofstream(output file stream):专门用于向文件中写入数据(写文件)。

它们都继承自基础的ios类,遵循 C++ 流操作的统一规则,是处理文件最常用的工具。

1. 前置条件

使用这两个类前,必须包含头文件:

#include <fstream> // 核心头文件 #include <iostream> // 用于控制台输出(示例用) #include <string> // 处理字符串(示例用) using namespace std; // 简化代码,新手友好

2. ofstream(写文件)示例

用于创建 / 打开文件并写入内容,常见模式:

  • 默认模式:打开文件,若文件不存在则创建,若存在则清空原有内容。
  • ios::app:追加模式,写入内容到文件末尾,不覆盖原有内容。
// 写文件示例 void writeFile() { // 1. 创建ofstream对象并打开文件(也可以先创建对象,再用open()打开) ofstream outFile("example.txt"); // 打开当前目录下的example.txt // 检查文件是否成功打开 if (!outFile.is_open()) { cout << "文件打开失败!" << endl; return; } // 2. 写入数据(支持<<流操作符,和cout用法类似) outFile << "Hello, C++ 文件流!" << endl; outFile << "数字示例:" << 123 << endl; outFile << "浮点数示例:" << 3.14159 << endl; // 3. 关闭文件(析构函数会自动关闭,但显式关闭是好习惯) outFile.close(); } // 追加写入示例 void appendFile() { ofstream outFile("example.txt", ios::app); // 追加模式打开 if (!outFile) { // 简写方式,等价于!outFile.is_open() cout << "文件打开失败!" << endl; return; } outFile << "这是追加的内容" << endl; outFile.close(); }
3. ifstream(读文件)示例(逐行读,getline)

用于打开文件并读取内容,常见读取方式:逐行读、逐个字符读、按类型读。

// 读文件示例 void readFile() { // 1. 创建ifstream对象并打开文件 ifstream inFile("example.txt"); if (!inFile) { cout << "文件打开失败!" << endl; return; } // 2. 逐行读取文件内容(最常用) string line; cout << "文件内容:" << endl; while (getline(inFile, line)) { // 读取一行到line,直到文件末尾 cout << line << endl; } // 也可以按类型读取(比如读取数字) // int num; // inFile >> num; // 类似cin >> num // 3. 关闭文件 inFile.close(); }
  • ifstream输入文件流,核心作用是从文件读取数据,常用操作:open()打开文件、getline()逐行读、>>按类型读、close()关闭文件。

  • ofstream输出文件流,核心作用是向文件写入数据,常用操作:open()打开文件(可指定ios::app追加)、<<写入数据、close()关闭文件。

  • 使用时必须包含<fstream>头文件,且务必检查文件是否成功打开,避免操作失败。

先明确核心规则

操作类型文件不存在时的行为文件存在时的行为(默认模式)
ifstream读文件打开失败(is_open()返回 false),无法读取正常打开,可读取内容
ofstream写文件自动创建新文件,正常写入清空原有内容,重新写入(覆盖模式)

逐个字符读取内容代码如下:

//读文件ifstream void readfile() { //创建ifstream对象并且打开文件 ifstream infile("fan.txt"); if (!infile.is_open()) { cout << "文件打开失败" << endl; return; } //逐个字符读 char c; cout << "逐个字符读文件内容:" << endl; while (infile.get(c)) { if (c == '\n') { cout << endl; } else if (c == ' ') { cout << " "; } else { cout << c; } } //关闭文件 infile.close(); }
http://www.jsqmd.com/news/422182/

相关文章:

  • JS对象-事件监听
  • CSV文件具有简单易用、广泛兼容、人类可读和高压缩性的优点
  • 0xgame2025
  • 基于springboot高校创新创业系统
  • 面向对象三大特征之一:封装
  • 论文排版利器:8款目录生成软件深度测评
  • windows注册表编辑工具ExecTI - Run as TrustedInstaller
  • AI网关
  • 高效论文写作必备:8款目录生成工具横向评测
  • path路径模块
  • Agentic AI提示工程自我学习能力的教育应用,提示工程架构师介绍
  • 大数据领域数据建模的物联网数据处理
  • 一键生成目录:8款智能工具全面对比,排版更省心
  • AI应用架构师视角:私有化大模型部署的技术难点
  • 【UI自动化测试】6_Appium基础API _App基础操作
  • 大数据领域数据工程的关键流程详解
  • 捷克技术大学提出RNS:让AI“看图说话“更准确的新方法
  • 【回溯】BISHI83 迷宫问题
  • 康考迪亚大学研究团队发明了会“不确定“的AI医生
  • 百度架构师亲授:大规模推理的ONNX模型优化全流程(从转换到部署)
  • 每日课后作业
  • 260207
  • 彼得林奇的“家庭股票“在跨代财富传承中的税务规划
  • 基于springboot高校不同专业毕业生就业率统计系统
  • 第20天:模型调优与Pipeline——交叉验证与参数网格搜索 - 2305
  • 每日作业
  • Arrays类
  • 第21天:图计算入门——GraphX与图论基础 - 2305
  • 第22天:GraphX核心抽象——属性图的构建与操作 - 2305
  • Material Design 3 动态布局:自适应界面开发全攻略