我有这样的代码:
# 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。
答案 0 :(得分:3)
标准行为是第一次写入失败。这将设置std::ofstream::badbit
,并且会默默忽略进一步的写入。
通过设置m_myFile.exceptions(std::ofstream::badbit)
可以将此静默失败更改为例外,但默认情况下它已关闭。
您可以通过创建&#34; dev null&#34;来使任何流(甚至std :: cout)丢弃其输出。 streambuf
然后将您的流切换到该缓冲区(通过.rdbuf
)
答案 1 :(得分:0)
如果你没有打开文件,你就会有一个带有正在写入的默认构造文件缓冲区的流,并且当丢弃ofstream时它将被丢弃。