4

我一直在用 ofstreams 写入文件时遇到奇怪的问题,现在有了

ofstream.fail()

在我的 ofstream.open() 调用之后立即返回 true。

是否有一些方法可以获得额外的信息,比如关于为什么设置失败状态的更多细节?

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

4

4 回答 4

1

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

if (!outfile.is_open());

{

}

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

于 2015-03-20T15:01:08.653 回答
1

确保它ofstream没有与之关联的文件(已经用该流打开了一个文件)。根据http://www.cplusplus.com/reference/fstream/ofstream/open/

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

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

编辑:如上所示,您可以failbit flag通过使用检查设置了哪个 'stream.rdstate()

于 2013-04-03T12:25:41.510 回答
0

引用这个

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;
}
于 2015-04-20T07:55:00.717 回答
0
io_state word=ofstream.rdstate();
if(word & ios::failbit){
    cout<<"Failbit flag is set";
}
//etc
于 2013-04-03T12:22:43.550 回答