2

Stream インスタンスをラップするクラスがあるので、それを使用して FileStream と NetworkStream をラップできます。ここで、ストリームがまだデータを配信しているかどうかをテストしたいと思います。つまり、NetworkStream がまだ接続されているかどうか、または FileStream が最後に達したかどうかをテストします。

次の Stream.Read() が例外を引き起こすかどうかを判断するために使用できる戻り値を持つ関数はありますか?

前もって感謝します。

4

3 に答える 3

3

Stream.Read最後に例外をスローするべきではありません。ポジティブでないものを返します。私はこれを取り戻すまでただ読む(...)-すなわち

int read;
while((read = stream.Read(buffer, 0, buffer.Length) > 0) {
    // process "read"-many bytes
}

-がありますが、これはストリーム自体ではなく、バッファを参照していることに注意しNetworkStreamてください(ここで説明します)。私はこれについてのみ言及しているので、ストリームが閉じているかどうかを確認するためにそれを使用しようとしないでください。それはそれが意味することではないからです。DataAvailable

でラップするStreamと、またはを使用してクロージャをテストStreamReaderできます。PeekEndOfStream

bool isEnd = reader.EndOfStream;

また:

int b = reader.Peek();
if(b < 0) {... was end ...}
于 2009-01-16T16:00:09.547 に答える
0
stream.CanRead
于 2009-01-16T15:59:37.647 に答える
0

反対側がソケットを閉じると、NetworkStream は EOF を返します (Read は 0 バイトを返します)。

于 2012-11-05T15:02:01.157 に答える