0

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

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

4

2 回答 2

1

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

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

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

相关文件是:

cgatools/util/Streams.[ch]pp

于 2011-05-19T23:59:45.517 回答
0

由于您仍然使用文件系统库,因此您可以在尝试使用流访问文件之前测试该文件是否存在。这将避免您的臃肿问题,但它不会以与您正在寻找的相同的意义运行,即流本身不会执行存在性检查。

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

于 2011-07-10T04:48:02.427 回答