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 に答える