当它没有在c ++中打开时,是否允许写入ofstream

时间:2015-02-13 12:27:12

标签: c++ std ofstream

我有这样的代码:

# in class definition
std::ofstream m_myFile;

## some where in code
m_myFile.open(filename);

然后在几个地方,我写文件如下:

m_myFile << "some data to file"<<std::endl;

这很好用,现在我需要向系统添加一个标志,当没有设置时,不应该创建和写入该文件。我已经检查过,如果我这样做,我可以运行该应用程序:

if(createFile)
{
      m_myFile.open(filename);
}

并按原样保留写入文件,并且我没有在Windows上收到任何运行时错误。我的问题是,如果我没有打开文件并写入其流,标准行为是什么?

我是否应该收到运行时错误或者ofstream只是忘记了数据而不是运行时错误?

我正在使用Visual Studio 2013。

2 个答案:

答案 0 :(得分:3)

标准行为是第一次写入失败。这将设置std::ofstream::badbit,并且会默默忽略进一步的写入。

通过设置m_myFile.exceptions(std::ofstream::badbit)可以将此静默失败更改为例外,但默认情况下它已关闭。

您可以通过创建&#34; dev null&#34;来使任何流(甚至std :: cout)丢弃其输出。 streambuf然后将您的流切换到该缓冲区(通过.rdbuf

答案 1 :(得分:0)

如果你没有打开文件,你就会有一个带有正在写入的默认构造文件缓冲区的流,并且当丢弃ofstream时它将被丢弃。