public member function
<fstream>

std::basic_ifstream::open

void open (const char* filename,  ios_base::openmode mode = ios_base::in);
void open (const   char* filename,  ios_base::openmode mode = ios_base::in);void open (const string& filename,  ios_base::openmode mode = ios_base::in);
打开文件
打开由参数 filename 标识的文件,并将其与流对象关联,以便对文件的内容执行输入/输出操作。参数 mode 指定了打开模式

如果流已关联到文件(即它已经打开),则调用此函数失败。

流的文件关联由其内部流缓冲区维护
内部,该函数调用rdbuf()->open(filename,mode|ios_base::in)

如果失败,函数会将 failbit 设置到流中。
成功时,函数会清除流的状态标志(将其设置为 goodbit)。
失败时,会设置 failbit

参数

filename
包含要打开的文件的名称的字符串。
有关其格式和有效性的具体说明取决于库实现和运行环境。
mode
描述文件请求的 i/o 模式的标志。
这是一个位掩码成员类型 openmode 的对象,由以下成员常量的组合构成:
成员常量代表access
in *输入文件以读模式打开:内部流缓冲区支持输入操作。
下可用的类型输出文件以写模式打开:内部流缓冲区支持输出操作。
binarybinary操作以二进制模式执行,而非文本模式。
ate在末尾输出位置从文件末尾开始。
appappend (追加)所有输出操作都在文件末尾进行,追加到其现有内容。
trunctruncate (截断)文件打开前存在的任何内容都将被丢弃。
这些标志可以通过按位或运算符(|)组合。
* in 总是为 basic_ifstream 对象设置(即使在参数 mode 中显式未设置)。
请注意,即使 basic_ifstream 是输入流,其内部的 basic_filebuf 对象也可以设置为支持输出操作。

如果模式设置了 app,则打开操作失败。如果设置了 trunc 但未设置 out,操作也会失败。
如果模式同时设置了 truncapp,则打开操作失败。如果设置了 trunc 但未设置 out,操作也会失败。

返回值



如果函数未能打开文件,则为流设置 failbit 状态标志(如果使用成员 exceptions 注册了该状态标志,则可能抛出 ios_base::failure)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// print the content of a text file.
#include <iostream>     // std::cout
#include <fstream>      // std::ifstream

int main () {
  std::ifstream ifs;

  ifs.open ("test.txt", std::ifstream::in);

  char c = ifs.get();

  while (ifs.good()) {
    std::cout << c;
    c = ifs.get();
  }

  ifs.close();

  return 0;
}

数据竞争

修改 basic_ifstream 对象。
对同一对象的并发访问会引入数据竞争。

异常安全

基本保证:如果抛出异常,处于有效状态。
如果函数失败(设置了 failbit 状态标志)并且已为该状态设置了 exceptions 成员以抛出异常,则它将抛出成员类型为 failure 的异常。

另见