# std::basic_filebuf<CharT,Traits>::open

< cpp‎ | io‎ | basic filebuf

std::basic_filebuf<CharT, Traits>* open( const char* s, std::ios_base::openmode mode ) | (1) |
std::basic_filebuf<CharT, Traits>* open( const std::string& str, std::ios_base::openmode mode ) | (2) | (C++11 起)
std::basic_filebuf<CharT, Traits>* open( const std::filesystem::path& p, std::ios_base::openmode mode ) | (3) | (C++17 起)
std::basic_filebuf<CharT, Traits>* open( const std::filesystem::path::value_type* s, std::ios_base::openmode mode ) | (4) | (C++17 起)

打开拥有给定名称（ s 、 p.c_str() (C++17 起) 或 str.c_str() ，取决于重载）的文件。

仅若 std::filesystem::path::value_type 非 char 才提供重载 (4) 。 | (C++17 起)

如同通过以按下列方式确定的第二参数 (`mode`) 调用 std::fopen 打开文件：

mode | openmode & ~ate | 若文件已存在的动作 | 若文件不存在的动作
--- | --- | --- | ---
"r" | in | 从头读取 | 打开失败
"w" | out, out|trunc | 销毁内容 | 创建新文件
"a" | app, out|app | 后附到文件 | 创建新文件
"r+" | out|in | 从头读取 | 错误
"w+" | out|in|trunc | 销毁内容 | 创建新文件
"a+" | out|in|app, in|app | 写入到结尾 | 创建新文件
"rb" | binary|in | 从头读取 | 打开失败
"wb" | binary|out, binary|out|trunc | 销毁内容 | 创建新文件
"ab" | binary|app, binary|out|app | 写入结尾 | 创建新文件
"r+b" | binary|out|in | 从头读取 | 错误
"w+b" | binary|out|in|trunc | 销毁内容 | 创建新文件
"a+b" | binary|out|in|app, binary|in|app | 写入到结尾 | 创建新文件

若 `openmode` 不是列出的模式之一，则 `open()` 失败。

若打开操作成功且 openmode & std::ios_base::ate != 0 （设置了 `ate` 位），则重寻位文件位置到文件尾，如同用调用 std::fseek(file, 0, SEEK_END) ，其中 `file` 是调用 `fopen` 返回的指针。若寻位失败，则调用 close() 并返回空指针以指示失败。

若关联文件已打开，则立即返回空指针。

### 参数

s, str, p | - | 要打开的文件名； `s` 必须指向空终止字符串
openmode | - | 文件打开模式， std::ios_base 模式的二进制或

### 返回值

成功时为 this ，失败时为空指针。

### 注意

常由 std::basic_fstream 的构造函数或 `open()` 成员函数调用 `open()` 。

### 示例

| 本节未完成 原因：暂无示例

### 参阅

is_open | 检查关联文件是否打开 (公开成员函数)
close | 冲入放置区缓冲区并关闭关联的文件 (公开成员函数)