从 std::fstreams 以可移植方式获取有意义的文件访问错误消息的最佳方法是什么? badbits
和 failbits
的原始性变得有点烦人。我之前针对 win32 和 POSIX 编写了自己的异常层次结构,这比 STL 的方式灵活得多。
我从 fstream 的向下转换 catch (
启用了异常。这对我来说意义不大,虽然我知道问题出在哪里,但我希望我的程序能提供更多信息,这样当我几个月后开始部署时,我的生活会更轻松。std::exception
) 的 what
方法收到“basic::ios_clear”作为错误消息
Boost 中有什么东西可以从 fstream
的实现跨平台和跨 STL 实现中提取有意义的消息吗?
最佳答案
没有人阻止您检查 errno
/strerror
(例如在您的异常处理程序中)以了解更具体的失败原因。
更新——关于可移植性
顺便说一下,IIRC Visual Studio 的 fstream
实现调用 _open
/_read
/_write
/etc。 CRT 方法,设置 errno
。 Microsoft 不保证在 CRT 方法返回后 GetLastError
仍然包含正确的值。 cygwin、mingw 等实现的同上,它设置 errno
没有关于 GetLastError
的声明或保证。
所以我支持我的声称您需要、可以并且因此想要做的就是检查errno
。
现在,鉴于以上所有情况,如果您仍然想通过使用 Boost::System
而不是简单地调用 strerror
来复杂化您的生活和过度设计,那么我想我的定义和你对优雅和简约的定义不一样。 :)
关于c++ - 从 C++ 中的 fstream 获取有意义的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2639324/