C++可以重用fstream来打开和写入多个文件吗?

5Yr*_*DBA 19 c++

我需要打开10个文件才能按顺序写入.我可以有一个fstream来做这个吗?我是否需要在每个文件之间执行任何特殊操作(flush()除外)或者只调用open(file1, fstream::out | std::ofstream::app)每个文件并在写入所有10个文件的末尾关闭流.

GMa*_*ckG 26

您需要先关闭它,因为调用open已打开的流失败.(这意味着该failbit标志设置为true).注意close()刷新,所以你不必担心:

std::ofstream file("1");
// ...
file.close();
file.clear(); // clear flags
file.open("2");
// ...

// and so on
Run Code Online (Sandbox Code Playgroud)

另请注意,您close()最后一次不需要它; 析构函数为你做了(因此也是flush()).这可能会成为一个很好的实用功能:

template <typename Stream>
void reopen(Stream& pStream, const char * pFile,
            std::ios_base::openmode pMode = ios_base::out)
{
    pStream.close();
    pStream.clear();
    pStream.open(pFile, pMode);
}
Run Code Online (Sandbox Code Playgroud)

你得到:

std::ofstream file("1");
// ...
reopen(file, "2")
// ...

// and so on
Run Code Online (Sandbox Code Playgroud)

  • 最好在对`close()`和`open()`的调用之间插入对`clear()`的调用,因为状态标志不会被清除.有关详细说明,请参阅http://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.stream_reopening_fails. (4认同)