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

C++ 文件流详解

在 C++ 中,文件处理是一个常见且重要的任务。标准库提供了三种主要的文件流类来处理文件输入和输出:fstreamifstreamofstream。这些类都在 <fstream> 头文件中定义。

一、fstream

fstream 是文件流类的基类,既可以用于读操作,也可以用于写操作。它结合了 ifstreamofstream 的功能。如果你需要对同一个文件进行读写操作,fstream 是最佳选择。

1.1 基本用法

#include <iostream>
#include <fstream>
#include <string>int main() {std::fstream file;// 打开文件file.open("example.txt", std::ios::in | std::ios::out | std::ios::app);if (!file) {std::cerr << "Failed to open file." << std::endl;return 1;}// 写入文件file << "Hello, fstream!" << std::endl;// 读取文件std::string line;file.seekg(0); // 移动读指针到文件开始while (getline(file, line)) {std::cout << line << std::endl;}// 关闭文件file.close();return 0;
}

1.2 打开模式

fstream 支持多种打开模式,可以组合使用:

  • std::ios::in:以读模式打开文件
  • std::ios::out:以写模式打开文件
  • std::ios::app:以追加模式打开文件
  • std::ios::ate:打开文件并定位到文件末尾
  • std::ios::trunc:如果文件存在,则清空文件
  • std::ios::binary:以二进制模式打开文件

二、ifstream

ifstream 是输入文件流类,专门用于文件读操作。它继承自 istream,并添加了文件输入操作的功能。

2.1 基本用法

#include <iostream>
#include <fstream>
#include <string>int main() {std::ifstream file("example.txt");if (!file) {std::cerr << "Failed to open file." << std::endl;return 1;}std::string line;while (getline(file, line)) {std::cout << line << std::endl;}file.close();return 0;
}

2.2 打开模式

  • std::ios::in:以读模式打开文件(默认模式)
  • std::ios::binary:以二进制模式打开文件

三、ofstream

ofstream 是输出文件流类,专门用于文件写操作。它继承自 ostream,并添加了文件输出操作的功能。

3.1 基本用法

#include <iostream>
#include <fstream>int main() {std::ofstream file("example.txt");if (!file) {std::cerr << "Failed to open file." << std::endl;return 1;}file << "Hello, ofstream!" << std::endl;file.close();return 0;
}

3.2 打开模式

  • std::ios::out:以写模式打开文件(默认模式)
  • std::ios::app:以追加模式打开文件
  • std::ios::ate:打开文件并定位到文件末尾
  • std::ios::trunc:如果文件存在,则清空文件
  • std::ios::binary:以二进制模式打开文件

四、总结

  • fstream:用于同时读写文件。
  • ifstream:用于读取文件。
  • ofstream:用于写入文件。

正确选择和使用这些文件流类,可以有效地处理各种文件输入输出操作。掌握打开模式以及流的基本操作,是进行文件处理的基础。在实际开发中,根据具体需求选择合适的文件流类,可以提高代码的可读性和维护性。

http://www.lryc.cn/news/412148.html

相关文章:

  • docker compse简介与安装
  • 基于深度学习的零样本学习
  • C++——list容器以及手动实现
  • Win11系统文件资源管理器鼠标右键卡顿解决方法
  • 零基础学Python之 第十八讲 文件读写
  • 检索增强生成(RAG):智能内容生成的新纪元
  • ubuntu2204安装elasticsearch7.17.22
  • 介绍Servlet后端中两种接收参数方式req.getAttributer和req.getParameter的区别
  • Delphi FMX安卓Android播放mp3音频内存流
  • MapUtils常用方法
  • 自定义PasswordEditText控件,在手机字体应用后,字体样式未发生改变
  • 学习打卡第31天
  • opencascade AIS_TexturedShape源码学习 贴纹理
  • C# winform 串口读取字节流,MB级别字节流
  • 创建一个简单的单链表
  • 15.1 Zookeeper简介安装及基础使用
  • 详细说明Java中Map和Set接口的使用方法
  • CSS3 scale 适配
  • SX_初识GitLab_1
  • 这才是 PHP 高性能框架 Workerman 的立命之本
  • Python——记录pip问题(解决下载慢、升级失败问题)
  • Windows Server 2025 Preview 部署 Ⅰ—— ISO下载和硬件要求
  • AI2-CUDA、CuDNN、TensorRT的详细安装教程
  • TCP连接中重复使用了两个相同的端口怎么办
  • 如何自定义异常
  • C++中的依赖注入
  • CSS平面转换-平移
  • Linux-3:Shell编程——基础语法(0-50%)
  • C++ --> string类模拟实现(附源码)
  • 基于PHP+MySQL组合开发的微信活动投票小程序源码系统 带完整的安装代码包以及搭建部署教程