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

C++(20): 文件输入输出库 —— <fstream>

目录

一、 的核心功能

二、核心类及功能

三、核心操作示例

1. 文本文件写入(ofstream)

2. 文本文件读取(ifstream)

3. 二进制文件操作(fstream)

四、文件打开模式

五、文件指针操作

六、错误处理技巧

七、实际应用场景


一、<fstream> 的核心功能

  <fstream> 是 C++ 标准库中处理文件输入输出的关键组件,提供以下核心功能:

        文本/二进制文件读写、文件流状态管理、文件指针定位、多种文件打开模式控制


二、核心类及功能

类名继承关系功能描述典型用途
ofstream继承自 ostream输出文件流(写操作)创建/覆盖文件内容
ifstream继承自 istream输入文件流(读操作)读取文件内容
fstream继承自 iostream双向文件流(读写操作)同时读写文件

三、核心操作示例

1. 文本文件写入(ofstream)
#include <fstream>int main() {std::ofstream outFile("data.txt");  // 自动打开文件if (outFile) {  // 检查是否打开成功outFile << "Line 1: 文本内容\n";    // 写入字符串outFile << "Line 2: " << 42 << "\n"; // 写入混合数据outFile << 3.14 << "\n";            // 写入浮点数} else {std::cerr << "文件打开失败!";}// 文件会在对象销毁时自动关闭return 0;
}

生成文件内容:

Line 1: 文本内容
Line 2: 42
3.14


2. 文本文件读取(ifstream)
#include <fstream>
#include <iostream>int main() {std::ifstream inFile("data.txt");if (inFile.is_open()) {std::string line;while (std::getline(inFile, line)) {  // 逐行读取std::cout << "读取内容: " << line << "\n";}} else {std::cerr << "文件不存在!";}return 0;
}

输出结果:

读取内容: Line 1: 文本内容
读取内容: Line 2: 42
读取内容: 3.14

3. 二进制文件操作(fstream)
#include <fstream>
#include <iostream>struct DataPacket {int id;double value;char tag[20];
};int main() {// 写入二进制数据DataPacket data{1001, 3.1415926, "binary"};std::ofstream binOut("data.bin", std::ios::binary);binOut.write(reinterpret_cast<char*>(&data), sizeof(data));// 读取二进制数据DataPacket loaded;std::ifstream binIn("data.bin", std::ios::binary);binIn.read(reinterpret_cast<char*>(&loaded), sizeof(loaded));std::cout << "ID: " << loaded.id << "\nValue: " << loaded.value << "\nTag: " << loaded.tag;return 0;
}

输出结果:

ID: 1001
Value: 3.14159
Tag: binary

四、文件打开模式

通过位或操作符 | 组合使用多种模式:

std::fstream file("data.txt", std::ios::in |     // 可读std::ios::out |    // 可写std::ios::app |    // 追加模式std::ios::binary); // 二进制模式
模式标志功能描述
std::ios::in以读取模式打开文件
std::ios::out以写入模式打开文件
std::ios::app追加模式(不覆盖原有内容)
std::ios::ate打开时定位到文件末尾
std::ios::trunc如果文件存在则清空内容
std::ios::binary以二进制模式操作文件

五、文件指针操作

std::fstream file("data.txt", std::ios::in | std::ios::out);// 定位到第10字节处
file.seekg(10, std::ios::beg);  // 输入指针(读取位置)
file.seekp(10, std::ios::beg);  // 输出指针(写入位置)// 获取当前指针位置
std::streampos readPos = file.tellg();
std::streampos writePos = file.tellp();

六、错误处理技巧

std::ifstream file("missing.txt");// 检查文件状态
if (file.fail()) {std::cerr << "错误代码: " << errno << std::endl;
}// 重置错误状态
file.clear();

七、实际应用场景

  1. 配置文件读写:使用文本模式处理 .ini 文件

  2. 数据持久化:用二进制格式保存游戏进度

  3. 日志系统:用追加模式记录程序运行日志

  4. 大数据处理:通过文件指针随机访问大型数据文件


通过以上示例和说明,可以全面掌握 <fstream> 库的核心用法。实际开发中需注意:

  1. 二进制操作时确保数据的内存布局一致

  2. 文件路径使用绝对路径或正确相对路径

  3. 及时处理文件流的状态异常

相关文章:

  • 关于Android Studio for Platform的使用记录
  • Android Studio报错Cannot parse result path string:
  • 配置ssh服务-ubuntu到Windows拷贝文件方法
  • 远程主机状态监控-GPU服务器状态监控-深度学习服务器状态监控
  • 【C/C++】C++返回值优化:RVO与NRVO全解析
  • Java-反射(Reflection)
  • MoveIt Setup Assistant 在导入urdf文件的时候报错
  • math toolkit for real-time development读书笔记一三角函数快速计算(2)
  • JavaScript【4】数组和其他内置对象(API)
  • 清华大学大模型驱动的跨尺度空间智能研究最新综述:具身智能体、智慧城市和地球科学领域的进展
  • 跨国应用程序的数据存储方案常见的解决方案
  • 什么是PMBus
  • JS 高级程序设计 设计模式
  • 读写锁应用场景,适合读多写少
  • 设计模式 - 单例模式 - Tips
  • [ctfshow web入门] web77
  • OpenCV 特征检测全面解析与实战应用
  • AI知识梳理——RAG、Agent、ReAct、LangChain、LangGraph、MCP、Function Calling、JSON-RPC
  • 【滑动窗口】LeetCode 209题解 | 长度最小的子数组
  • 系统架构设计(七):数据流图
  • 广西北流出现强降雨,1人被洪水冲走已无生命体征
  • 光速晋级!2025年多哈世乒赛孙颖莎4比0战胜对手
  • 《歌手》回归,人均技术流,00后整顿职场
  • 圆桌丨全球化博弈与人工智能背景下,企业如何落地合规体系
  • 广西壮族自治区党委副书记、自治区政府主席蓝天立接受审查调查
  • 大陆非遗项目打铁花、英歌舞将在台演出