首页 > 解决方案 > std::ofstream 是否保证在打开新文件时将关闭旧打开的文件?

问题描述

#include <fstream>

int main()
{
    auto fout = std::ofstream("/tmp/a.txt");
    fout.open("/tmp/b.txt"); // Will "/tmp/a.txt" be closed?
    fout.open("/tmp/c.txt"); // Will "/tmp/b.txt" be closed?
}

如果打开新文件,是否 std::ofstream 保证将关闭旧打开的文件?

标签: c++c++11standardsfile-handlingiostream

解决方案


第二次和后续调用将失败。

[filebuf.members]
basic_filebuf* open(const char* s, ios_base::openmode mode);
2效果:如果is_open() != false,返回一个空指针。否则...

[ofstream.members]
void open(const char* s, ios_base::openmode mode = ios_base::out);
3效果:呼叫rdbuf()->open(s, mode | ios_base::out)。如果该函数不返回空指针调用clear(),否则调用setstate(failbit)


推荐阅读