公有成员函数
<fstream>

std::filebuf::open

filebuf* open (const char* filename,  ios_base::openmode mode);
filebuf* open (const char* filename,  ios_base::openmode mode);filebuf* open (const string filename, ios_base::openmode mode);
打开文件
打开由参数 filename 标识的文件,将其内容与文件流缓冲区对象关联,以便对其执行输入/输出操作。允许的操作和一些操作细节取决于参数 mode

如果该对象已与文件关联(即,它已打开),则此函数失败。

参数

filename
包含要打开的文件的名称的字符串。
mode
描述文件请求的输入/输出模式的标志。
这是位掩码类型 ios_base::openmode 的对象,它由以下常量的组合构成:
代表access
ios_base::in输入文件以读取模式打开,支持输入操作。
ios_base::out输出文件以写入模式打开,支持输出操作。
ios_base::binarybinary操作以二进制模式执行,而非文本模式。
ios_base::ate在末尾put 指针pptr)位于受控输出序列的末尾。
ios_base::appappend (追加)所有输出操作都在文件末尾进行,追加到其现有内容。
ios_base::trunctruncate (截断)文件打开前存在的任何内容都将被丢弃。
这些标志可以通过按位或运算符(|)组合。

如果模式同时设置了 ios_base::truncios_base::app,则打开操作失败。如果设置了其中一个但未设置 ios_base::out,或者同时设置了 ios_base::appios_base::in,则也失败。
如果模式同时设置了 ios_base::truncios_base::app,则打开操作失败。如果设置了 ios_base::trunc 但未设置 ios_base::out,也失败。

返回值

如果成功,函数返回 this
如果失败,文件未打开,并返回一个空指针

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// filebuf::open()
#include <iostream>
#include <fstream>

int main () {
  std::ifstream is;
  std::filebuf * fb = is.rdbuf();

  fb->open ("test.txt",std::ios::out|std::ios::app);

  // >> appending operations here <<

  fb->close();

  return 0;
}

数据竞争

修改 filebuf 对象。
同时访问同一个文件流缓冲区对象可能导致数据争用。

异常安全

基本保证:如果抛出异常,*文件流缓冲区*处于有效状态。

另见