fstream是C++中用于文件读写的核心类,结合了ifstream和ofstream功能,支持文本和二进制文件操作。使用前需包含头文件,并通过open()函数或构造函数以指定模式(如ios::in、ios::out、ios::binary等)打开文件。读写文本时可使用

在C++中,fstream 是用于文件输入输出操作的核心类,它结合了 ifstream(输入文件流)和 ofstream(输出文件流)的功能,允许对文件进行读取、写入甚至同时进行。使用 fstream 可以方便地处理文本文件和二进制文件。
包含头文件与基本类型
要使用文件流,必须包含
#include iostream>
#include
using namespace std;
C++ 提供了三种主要的文件流类:
- ofstream:从内存向文件写数据(输出)
- ifstream:从文件读取数据到内存(输入)
- fstream:支持读写操作,可同时打开文件进行输入输出
打开文件的方法
可以使用 open() 函数或构造函数打开文件。常用方式如下:
立即学习“C++免费学习笔记(深入)”;
fstream file;file.open("data.txt", ios::in | ios::out); // 同时读写
// 或者直接构造:
fstream file("data.txt", ios::in | ios::out);
常用的打开模式包括:
- ios::in - 读取文件
- ios::out - 写入文件(默认会清空内容)
- ios::app - 追加模式,在文件末尾添加内容
- ios::ate - 打开后立即定位到文件末尾
- ios::binary - 以二进制方式操作
- ios::trunc - 若文件存在则清空内容(默认写入行为)
多个模式可以用按位或(|)组合使用。
读写文本文件示例
以下是一个简单的读写文本文件的例子:
#include#include
#include
using namespace std;
int main() {
fstream file("example.txt", ios::out);
if (!file.is_open()) {
cout
return 1;
}
file
file
file.close();
// 重新以读方式打开
file.open("example.txt", ios::in);
if (!file.is_open()) {
cout
return 1;
}
string line;
while (getline(file, line)) {
cout
}
file.close();
return 0;
}
二进制文件操作
对于非文本数据(如结构体、数组),推荐使用二进制模式。关键函数是 read() 和 write()。
struct Person {char name[20];
int age;
};
int main() {
Person p1 = {"Tom", 25};
fstream binFile("data.bin", ios::out | ios::binary);
if (binFile) {
binFile.write(reinterpret_cast
binFile.close();
}
Person p2;
binFile.open("data.bin", ios::in | ios::binary);
if (binFile) {
binFile.read(reinterpret_cast
cout
binFile.close();
}
return 0;
}
注意:使用 reinterpret_cast 将结构体指针转为 char*,以便正确写入原始字节。
检查状态与关闭文件
文件操作后应检查状态并及时关闭:
- is_open():判断文件是否成功打开
- good():一切正常
- fail():操作失败(如格式错误)
- eof():到达文件末尾
- bad():发生严重错误(如写入失败)
使用 close() 显式关闭文件,释放资源。
基本上就这些。掌握 fstream 的基本用法后,可以灵活处理配置文件、日志记录、数据存储等常见任务。关键是选择合适的打开模式,并注意错误处理。










