2

我需要在我的应用程序中使用 boost::iostreams::file_descriptor::handle_type。我尝试使用以下代码读取文件,但它一直在 while 循环中循环(in.readsome() 返回 0 )。

using namespace boost::iostreams;

file_descriptor_source source( "data.bin", never_close_handle);
stream_buffer<file_descriptor_source> stream(source);
std::istream in(&stream);

char buffer[1025];
memset(buffer, 0, sizeof(buffer));

while ( !in.eof() )
{
    streamsize read = in.readsome(&buffer[0], sizeof(buffer) - 1);
}

4

2 回答 2

1

到达文件末尾并不是您应该检查的唯一条件,因为可能还有其他情况您也必须处理。例如,您可以:

  • 检查是否发生了不可恢复的错误bad()
  • 检查关联的流上是否发生了错误fail()

最好检查流本身的健康状况,如下所示:

while (in) {
    streamsize read = in.readsome(buffer, sizeof(buffer) - 1);
    if (read > 0) {
        ...
    }
}

退出循环后,您可以使用 、 等检查退出的eof()原因fail()

于 2012-05-28T21:48:31.093 回答
0

以下语句不会从流中读取任何内容。

streamsize read = in.readsome(&buffer[0], sizeof(buffer) - 1);

并且总是返回 0,这就是它永远循环的原因。

“in”对象的初始化有问题。我不知道出了什么问题。

于 2012-05-28T22:34:29.910 回答