У меня есть класс, который обертывает экземпляр Stream, поэтому я могу использовать его для обертывания FileStreams и NetworkStreams. Теперь я хочу проверить, доставляет ли поток какие-либо данные, другими словами, я хочу проверить NetworkStream, если он все еще подключен, или FileStream, если он достиг своего конца.
Есть ли какая-либо функция, возвращаемое значение которой я могу использовать, чтобы определить, вызовет ли следующий Stream.Read () исключение?
Заранее спасибо.





stream.CanRead
Stream.Read не должен вызывать исключение в конце; он возвращает что-то отрицательное. Я просто Читаю (...), пока не верну это - т.е.
int read;
while((read = stream.Read(buffer, 0, buffer.Length) > 0) {
// process "read"-many bytes
}
Обратите внимание, что NetworkStream имеет DataAvailable, но это относится к буфер, а не к самому потоку (как обсуждалось здесь). Я упоминаю об этом только для того, чтобы вы не попытались использовать его, чтобы увидеть, закрыт ли поток, поскольку это не то, что это означает.
Если вы оберните свой Stream в StreamReader, тогда вы можете использовать Peek или EndOfStream для проверки закрытия:
bool isEnd = reader.EndOfStream;
или же:
int b = reader.Peek();
if (b < 0) {... was end ...}
К сожалению, это не решило мою проблему. Я в порядке с обработкой исключений прямо сейчас. Ваше здоровье!
NetworkStream вернет EOF (Read вернет 0 байтов), когда другая сторона закроет сокет.
Вы можете уточнить, какое исключение вы видите? Я честно хотел бы знать.