我有这样的代码:
# 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/