C++ ofstream与ifstream详细用法

星野
星野
发布时间:2026-10-14| 6人浏览过
原创

在C++中,文件I/O主要通过fstream类及其子类ifstream(输入)和ofstream(输出)实现。掌握文件的打开模式、读写方式(文本与二进制)及指针定位是进行底层数据存储的关键。

结果或目标

在使用C++进行文件操作时,需要能够根据需求正确选择流对象类型,以适当的模式打开文件,并安全地完成数据的读写与保存操作。

准备条件

要使用C++的文件流功能,必须包含头文件:
#include <fstream>。

系统提供了三个主要类用于文件操作:

  • ifstream:默认以输入方式(读)打开文件。
  • ofstream:默认以输出方式(写)打开文件。
  • fstream:可同时支持输入和输出操作。

真实操作顺序

第1步:打开文件

目的:建立流对象与磁盘文件的关联。
入口:open()成员函数或类构造函数。

fstream类中有一个open()函数,原型为:
void open(const char* filename, int mode, int access);

参数说明:

  • filename:文件路径(如 c:\\config.sys)。
  • mode:打开方式,可在 ios 基类中定义的标志组合:
  • ios::in:文件以输入方式打开(读取)。
  • ios::out:文件以输出方式打开(写入)。
  • ios::app:以追加方式打开,所有写入都在文件末尾。
  • ios::ate:打开后立即定位到文件尾(ios::app隐含此属性)。
  • ios::binary:以二进制模式打开,缺省为文本模式。
  • ios::trunc:若文件存在则清空内容(设为0长);若不存在则创建。

多个模式可用 | 连接,例如:
file.open("test.txt", ios::out | ios::binary);

完成状态:如果成功,流对象状态变为“就绪”;失败时可调用 is_open() 检查。

第2步:读写文本文件

目的:将结构化的字符串或基本数据类型写入文件或从文件读取。
入口:流插入运算符 << 与析取运算符 >>。

写入示例:

ofstream file("output.txt");
file << "Hello World" << endl;
int val = 42;
file << val << " is a value.";

读取示例:

ifstream file("input.txt");
string line;
while (getline(file, line)) {
    // 处理每一行
}

格式化控制:可使用操纵符控制输出格式,如 hex(十六进制)、dec(十进制)、oct(八进制)以及 setprecision(n) 控制浮点精度。

第3步:读写二进制文件

目的:高效处理非文本数据块或结构化内存数据。
入口:put()、get()、write() 和 read()。

单字符操作:

  • file.put('c'):向流写入一个字符。
  • char ch; file.get(ch):从流读取一个字符保存到 ch。
  • file.get(str, size, delim):读取指定数量字符直到分隔符。

数据块操作(通常用于结构体或数组):

// 写入
unsigned char buf[] = "Data Block";
ofstream out("data.bin", ios::binary);
out.write(buf, strlen((char*)buf));

// 读取
ifstream in("data.bin", ios::binary);
unsigned char readBuf[10];
in.read(readBuf, sizeof(readBuf));

注意:write 和 read 的参数类型为 unsigned char*,其他类型指针需强制转换。读取实际字节数可通过 in.gcount() 获取。

第4步:定位文件指针

目的:在非顺序访问场景下精确控制读写位置。
入口:seekg()(设置读位置)和 seekp()(设置写位置)。

原型:
istream & seekg(streamoff offset, seek_dir origin);
ostream & seekp(streamoff offset, seek_dir origin);

基准位置 origin:

  • ios::beg:文件开头。
  • ios::cur:当前位置。
  • ios::end:文件结尾。

示例:
file.seekg(0, ios::end); // 定位到文件末尾

第5步:关闭文件

目的:释放系统资源并提交缓冲区数据。
操作:调用 file.close();。
注:虽然对象销毁时会自动调用 close,但显式关闭能尽早释放资源并在出错时提前介入。

完成判断

  • 文件内容已按预期更新或读取完毕。
  • 没有发生因未关闭文件导致的资源泄露或数据丢失。
  • 对于二进制操作,确保使用了 ios::binary 以避免平台相关的文本转换干扰。

简要总结

C++的文件流机制依赖于 ifstream、ofstream 和 fstream。通过合理组合 ios 标志位可以灵活定义文件行为。文本读写推荐使用流运算符以保持简洁,而二进制数据块处理则应选用 read/write 以提高效率并避免格式解析开销。

以上就是C++ ofstream与ifstream详细用法的详细内容,更多关于C++文件编程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。