下面是一个简单的类,它尝试将整数写入文件。写入文件的方式是在文件末尾附加字符(在此模式下,如果文件不存在,则应创建文件)
#include <iostream>
#include <fstream>
class TestFileStream
{
private:
std::ofstream* _myFileStream;
bool isFileOpen;
public:
TestFileStream():isFileOpen(false)
{
_myFileStream = new std::ofstream("TestFile.txt", std::ios_base::out | std::ios_base::app );
isFileOpen = _myFileStream->is_open();
if( !isFileOpen )
{
std::cout << "Unable to open log file" << std::endl;
std::cout << "Good State: " << _myFileStream->good() <<std::endl;
std::cout << "Eof State: " << _myFileStream->eof() <<std::endl;
std::cout << "Fail State: " << _myFileStream->fail() <<std::endl;
std::cout << "Bad State: " << _myFileStream->bad() <<std::endl;
}
else
{
std::cout << "Opened log file" << std::endl;
}
}
~TestFileStream()
{
_myFileStream->close();
delete _myFileStream;
_myFileStream = nullptr;
}
void WriteFile( unsigned number )
{
if ( isFileOpen )
{
(*_myFileStream) << "Number: " << number << std::endl;
}
}
};
int main()
{
// Number of iterations can be multiple.
// For testing purpose, only 1 loop iteration executes
for( unsigned iter = 1; iter != 2; ++iter )
{
TestFileStream fileWriteObj;
fileWriteObj.WriteFile( 100+iter );
}
return 0;
}
当我执行上面的代码时,我得到以下日志输出:
Unable to open log file
Good State: 0
Eof State: 0
Fail State: 1
Bad State: 0
这似乎是一项微不足道的任务,但我无法找出导致失败的原因。请注意,此问题很可能与以下question
相关答案 0 :(得分:0)
总结一下这些评论,你发布的代码没有任何问题(除了非常规的新ostream之外;)
但请注意,打开文件可能由于多种原因而失败(权限,正在使用的文件,磁盘不可用,文件不存在,文件存在...)。这就是为什么你必须经常测试它。
如果您尝试在在线模拟器中运行上述代码,则可能会禁用文件IO。这可以解释为什么你设置了流失败位。