为iostreams获取更好的错误消息

时间:2011-05-19 22:26:46

标签: c++ boost iostream boost-filesystem

我实现了一个小程序,可以提取(并通过保险丝挂载)某种存档格式。我使用boost::filesystem::ifstream,但是在出错时(例如,用户想要提取的文件不存在)我得到非常不明白的错误消息。我想知道有没有办法在C ++中为IO相关问题获得更好的错误消息?

在相关的说明中,我想知道我是否应该使用C FILE*或者在fuse文件系统的情况下只使用普通的文件描述符?因为strerror(errno)比iostream给我的好。

2 个答案:

答案 0 :(得分:1)

我们找不到比使用boost :: iostreams和实现我们自己的基于文件的接收器和源更好的方法。

如果需要,可以在此处获取源代码(Apache许可):

http://sourceforge.net/projects/cgatools/files/1.3.0/cgatools-1.3.0.9-source.tar.gz/download

相关文件是:

cgatools / util的/流。[CH] PP

答案 1 :(得分:0)

由于您仍在使用文件系统库,因此您可以在尝试使用流访问它之前测试是否file exists。这可以避免你的膨胀问题,但它不会像你正在寻找的那样运行,即流本身不会执行存在检查。

但是,由于您使用的是boost::filesystem::ifstream,我假设您正在使用它,因为您使用的是boost::filesystem::path。在boost的ifstream实现中,它们继承自std::basic_ifstream并覆盖两个函数:构造函数和open。所以,如果你想要更好的错误报告,你可以简单地做同样的事情,继承boost的实现并覆盖这两个函数来提供你想要的检查。额外膨胀:可能不是很多,它将你想要的行为整合到流本身。