其他分享
首页 > 其他分享> > 当它没有在c中打开时,是否允许写入ofstream

当它没有在c中打开时,是否允许写入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)使任何流(甚至std :: cout)丢弃其输出

标签:ofstream,c,std
来源: https://codeday.me/bug/20191008/1871317.html