Does disposing streamreader close the stream?
c#, stream, streamreader
Solution
Yes, `StreamReader`, `StreamWriter`, `BinaryReader` and `BinaryWriter` all close/dispose their underlying streams when you call `Dispose` on them. They don't dispose of the stream if the reader/writer is just garbage collected though - you should always dispose of the reader/writer, preferrably with a `using` statement. (In fact, none of these classes have finalizers, nor should they have.)
Personally I prefer to have a using statement for the stream as well. You can nest `using` statements without braces quite neatly:
using (Stream stream = ...)
using (StreamReader reader = new StreamReader(stream, Encoding.Whatever))
{
}
Even though the `using` statement for the stream is somewhat redundant (unless the `StreamReader` constructor throws an exception) I consider it best practice as then if you get rid of the `StreamReader` and just use the stream directly at a later date, you'll already have the right disposal semantics.
Problem
I am sending a stream to methods to write on, and in those methods I am using a binary reader/wrtier. When the reader/writer gets disposed, either by `using` or just when it is not referenced, is the stream closed as well?? I would send a BinaryReader/Writer, but I am using a StreamReader too (maybe I should go around that. I am only using that for GetLine and ReadLine). This is quite troublesome if it closes the stream each time a writer/reader gets closed.