目录
在 C++ 中,fstream
、ifstream
和 ofstream
是用于文件输入输出操作的类,它们都是从 iostream
类继承而来的,因此具有类似的方法和功能。
公共成员函数
-
构造函数
fstream()
:默认构造函数,创建一个未关联任何文件的文件流对象。fstream(const char* filename, ios_base::openmode mode = ios_base::in | ios_base::out)
:构造函数,打开指定文件并关联到文件流对象。ifstream(const char* filename, ios_base::openmode mode = ios_base::in)
:构造函数,用于打开一个输入文件流对象。ofstream(const char* filename, ios_base::openmode mode = ios_base::out)
:构造函数,用于打开一个输出文件流对象。
-
打开和关闭文件
open(const char* filename, ios_base::openmode mode = ios_base::in | ios_base::out)
:打开指定文件并关联到文件流对象。close()
:关闭关联的文件。
-
文件状态
is_open()
:检查文件流是否已打开。good()
:检查文件流状态是否为goodbit
,表示文件操作正常。eof()
:检查文件流是否已到达文件末尾。fail()
:检查文件流状态是否为failbit
,表示文件操作失败。bad()
:检查文件流状态是否为badbit
,表示文件流处于不可恢复状态。
-
读操作
operator>>()
,getline()
,read()
,get()
:用于从文件读取数据。
-
写操作
operator<<()
,write()
,put()
:用于向文件写入数据。
-
定位
seekg(pos)
、seekg(pos, mode)
:定位输入位置。seekp(pos)
、seekp(pos, mode)
:定位输出位置。
-
文件流位置
tellg()
:获取当前输入位置。tellp()
:获取当前输出位置。
-
错误处理
clear()
:清除文件流的错误标志。setstate(state)
:设置文件流的状态。rdstate()
:获取文件流的状态。
-
其他
flush()
:刷新输出缓冲区。rdbuf()
:返回与流关联的streambuf
对象。
示例
下面是一个简单的示例,展示了如何使用 ifstream
和 ofstream
对象来读取和写入文件:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
// 写文件
ofstream outFile("output.txt");
if (outFile.is_open()) {
outFile << "Hello, World!" << endl;
outFile << 123 << endl;
outFile.close();
} else {
cerr << "Error opening output file" << endl;
return 1;
}
// 读文件
ifstream inFile("input.txt");
if (inFile.is_open()) {
string line;
while (getline(inFile, line)) {
cout << "Read from file: " << line << endl;
}
inFile.close();
} else {
cerr << "Error opening input file" << endl;
return 1;
}
return 0;
}
在这个示例中,程序打开一个名为 output.txt
的输出文件流,并向文件写入字符串和数字。然后,程序打开一个名为 input.txt
的输入文件流,并从文件中逐行读取数据并打印到控制台上。
根据具体需求和场景,使用适当的文件流对象(fstream
、ifstream
、ofstream
)来实现文件的读写操作,并根据返回值和文件流的状态来进行错误处理和异常处理。
私有成员和保护成员
-
rdbuf()
:basic_filebuf<char_type, traits_type>* rdbuf() const;
- 返回与流关联的
basic_filebuf
对象指针,它负责管理文件的底层缓冲区和文件操作。
-
buffer_type
:typedef basic_filebuf<char_type, traits_type> buffer_type;
- 定义流的缓冲区类型,用于管理流的输入和输出。
-
filebuf
:filebuf()
、open()
、close()
等函数和方法,用于实际的文件 I/O 操作。
-
failbit
、eofbit
、badbit
:- 定义了流的状态位,用于指示流的状态,包括操作失败、到达文件末尾、流处于不可恢复的错误状态等。
-
ios_base::openmode
:- 枚举类型,用于指定文件打开模式(读、写、追加等),是文件流构造函数和
open()
函数的参数之一。
- 枚举类型,用于指定文件打开模式(读、写、追加等),是文件流构造函数和
-
basic_ios
:- 是
fstream
、ifstream
和ofstream
类的基类,定义了流的基本状态和操作,包括流的状态标志、错误状态等。
- 是