c++调试stream fail()状态
c++ debugging ofstream fail() states?
我一直有奇怪的问题写文件与流,现在有
ofstream.fail()
在调用ofstream.open()之后返回true。
是否有一些方法可以获得额外的信息,比如关于为什么设置失败状态的更多细节?
编辑,附加信息:is_open()返回false
确保ofstream
没有与它相关联的文件(已经用该流打开了一个文件)。根据http://www.cplusplus.com/reference/fstream/ofstream/open/:
如果对象已经关联了一个文件(打开),则函数失败。失败时,设置failbit标志(可通过成员fail检查),根据异常设置的值,可能会抛出异常。
如果你打开了一个文件,在打开之前关闭它。
编辑:如上所示,您可以使用stream.rdstate()
failbit flag
'刚刚发现了同样的情况,我解决了一个打印错误,上面写着
如果(! outfile.is_open ());
{
}
不注意if语句后面的分号…
io_state word=ofstream.rdstate();
if(word & ios::failbit){
cout<<"Failbit flag is set";
}
//etc
引用
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;
}
相关文章:
- Problems with std::cin.fail()
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- std::future_error:无关联状态
- 如何避免LED在循环状态变化中闪烁?
- boost 是否有按特殊类型值编码状态"compact optional"?
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 检查两个节点在子节点上是否具有相同状态的更优雅的方法
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 试图在崇高中奔跑. 错误 已发生: 收集2.exe: 错误: ld 返回 1 退出状态
- 在容器上移动分配:以前包含的对象的状态
- collect2:错误:ld 返回 1 个退出状态未定义的引用
- 具有动态大小的特征矩阵的默认初始状态
- c++调试stream fail()状态