c ++调试ofstream fail()状态?

时间:2013-04-03 12:12:52

标签: c++ state ofstream

我在使用ofstreams写入文件时遇到了奇怪的问题,现在已经

ofstream.fail()
在我的ofstream.open()调用之后,

正在返回true。

是否有一些方法可以获取其他信息,例如有关为何设置失败状态的详细信息?

编辑,附加信息:is_open()返回false。

4 个答案:

答案 0 :(得分:1)

确保ofstream没有与之关联的文件(已打开包含该流的文件)。根据{{​​3}}:

  

如果对象已经关联(打开)文件,则该函数失败。   失败时,会设置failbit标志(可以使用成员失败检查),并且根据设置的异常值,可能会抛出异常。

如果您已打开文件,请在打开前将其关闭。

修改:如上所示,您可以使用failbit flag

查看“stream.rdstate()设置了哪个”

答案 1 :(得分:1)

刚刚发现同样的情况,我解决了一个读过的错字

if(!outfile.is_open());

{

}

在if语句之后没有注意到分号......

答案 2 :(得分:0)

io_state word=ofstream.rdstate();
if(word & ios::failbit){
    cout<<"Failbit flag is set";
}
//etc

答案 3 :(得分:0)

引用this

std::string DescribeIosFailure(const std::ios& stream)
{
  std::string result;

  if (stream.eof()) {
    result = "Unexpected end of file.";
  }

#ifdef WIN32
  // GetLastError() gives more details than errno.
  else if (GetLastError() != 0) {
    result = FormatSystemMessage(GetLastError());
  }
#endif

  else if (errno) {
#if defined(__unix__)
    // We use strerror_r because it's threadsafe.
    // GNU's strerror_r returns a string and may ignore buffer completely.
    char buffer[255];
    result = std::string(strerror_r(errno, buffer, sizeof(buffer)));
#else
    result = std::string(strerror(errno));
#endif
  }

  else {
    result = "Unknown file error.";
  }

  boost::trim_right(result);  // from Boost String Algorithms library
  return result;
}