Essa é antiga, mas eu queria fazer algo parecido hoje e descobri que as coisas mudaram. Desde o .net 4.5, existe um leaveOpen
argumento:
public StreamReader( Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize, bool leaveOpen )
O único problema é que não é totalmente óbvio o que definir para os outros parâmetros. Aqui está uma ajuda:
Na página msdn do StreamReader Constructor (Stream):
Esse construtor inicializa a codificação para UTF8Encoding, a propriedade BaseStream usando o parâmetro stream e o tamanho do buffer interno para 1024 bytes.
Isso apenas deixa detectEncodingFromByteOrderMarks
que, a julgar por código fonte, étrue
public StreamReader(Stream stream)
: this(stream, true) {
}
public StreamReader(Stream stream, bool detectEncodingFromByteOrderMarks)
: this(stream, Encoding.UTF8, detectEncodingFromByteOrderMarks, DefaultBufferSize) {
}
Seria bom se alguns desses padrões fossem expostos ou se os argumentos fossem opcionais para que pudéssemos especificar os que queremos.