我在使用ofstreams写入文件时遇到了奇怪的问题,现在已经
了ofstream.fail()
在我的ofstream.open()调用之后,正在返回true。
是否有一些方法可以获取其他信息,例如有关为何设置失败状态的详细信息?
编辑,附加信息:is_open()返回false。
答案 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;
}