命名空间
变体
操作

std::basic_fstream<CharT,Traits>::open

来自 cppreference.cn
< cpp‎ | io‎ | basic_fstream
void open( const char* filename,

           std::ios_base::openmode mode

               = std::ios_base::in | std::ios_base::out );
(1)
void open( const std::filesystem::path::value_type* filename,

           std::ios_base::openmode mode

               = std::ios_base::in | std::ios_base::out );
(2) (C++17 起)
void open( const std::string& filename,

           std::ios_base::openmode mode

               = std::ios_base::in | std::ios_base::out );
(3) (C++11 起)
void open( const std::filesystem::path& filename,

           std::ios_base::openmode mode

               = std::ios_base::in | std::ios_base::out );
(4) (C++17 起)

打开文件,并将文件流与名为 filename 的文件关联起来。

成功时调用 clear()。失败时调用 setstate(failbit)

1,2) 实际调用 rdbuf()->open(filename, mode) (关于该调用的效果的详细信息,请参阅 std::basic_filebuf::open)。 重载 (2) 仅在 std::filesystem::path::value_type 不是 char 时提供。(C++17 起)
3,4) 实际调用 (1,2),如同通过 open(filename.c_str(), mode)

目录

[编辑] 参数

filename - 要打开的文件名
mode - 指定流的打开模式。它是一个 位掩码类型,定义了以下常量:
常量 解释
app 每次写入前定位到流的末尾
二进制 二进制模式 打开
in 为读取而打开
out 为写入而打开
trunc 打开时丢弃流的内容
ate 打开后立即定位到流的末尾
noreplace (C++23) 以独占模式打开

[编辑] 返回值

(无)

[编辑] 示例

#include <fstream>
#include <iostream>
#include <string>
 
int main()
{
    std::string filename = "example.123";
 
    std::fstream fs;
    fs.open(filename);
 
    if (!fs.is_open())
    {
        fs.clear();
        fs.open(filename, std::ios::out); // create file
        fs.close();
        fs.open(filename);
    }
 
    std::cout << std::boolalpha;
    std::cout << "fs.is_open() = " << fs.is_open() << '\n';
    std::cout << "fs.good() = " << fs.good() << '\n';
}

[编辑] 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
LWG 22 C++98 成功打开后错误状态如何变化不清楚 错误状态未改变
LWG 409 C++98 成功打开后错误状态未改变 已清除[1]
LWG 460 C++98 重载 (1)mode 的默认参数
缺失(它存在于 概要 中)
已添加
  1. LWG 问题 #22 的决议被覆盖。

[编辑] 另请参见

检查流是否关联了文件
(公共成员函数) [编辑]
关闭关联的文件
(公共成员函数) [编辑]
打开一个文件并将其配置为关联字符序列
(std::basic_filebuf<CharT,Traits> 的公共成员函数) [编辑]