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

标签 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。

最佳答案

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

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

您可以通过创建“dev null”streambuf 然后将您的流切换到该缓冲区(通过 .rdbuf)

关于c++ - 未在 C++ 中打开时是否允许写入 ofstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28499630/

相关文章:

c++ - QT 插件、VTK QT 小部件、多线程和链接问题?

c++ - 节点优先级队列

c++ - ofstream.is_open() 在使用 VS 2015 的 DirectX12 应用程序中始终为 false

c++ - 每次调用时如何使c++函数写入输出文件的最后一行

C++ : passing ofstream& to function to continually append to . txt 文件

c++ - boost::program_options - 它是否对命令行选项进行精确的字符串匹配?

c++ - 将二叉搜索树转换为链表

c++ - 你如何在 XCode + C++ 中使用 std::vector?

c++ - 当不抛出 bad_alloc 时,保证 `new` 不抛出是什么意思

c++ - 调用指向已释放对象方法的 std::function 对象