未在 C++ 中打开时是否允许写入 ofstream

man*_*ans 3 c++ std ofstream

我有一个这样的代码:

# in class definition
std::ofstream m_myFile;

## some where in code
m_myFile.open(filename);
Run Code Online (Sandbox Code Playgroud)

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

m_myFile << "some data to file"<<std::endl;
Run Code Online (Sandbox Code Playgroud)

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

if(createFile)
{
      m_myFile.open(filename);
}
Run Code Online (Sandbox Code Playgroud)

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

我应该得到运行时错误还是 ofstream 只是忘记数据而不是运行时错误?

我正在使用 Visual Studio 2013。

MSa*_*ers 5

标准行为是第一次写入失败。这将设置std::ofstream::badbit和进一步的写入被静默忽略。

可以通过设置将这种静默失败更改为异常m_myFile.exceptions(std::ofstream::badbit),但默认情况下它是关闭的。

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