Stream.CopyTo() extension method

In one of my applications I needed copy data from one stream to another. After playing with streams a little bit I wrote CopyTo() extension method to Stream class you can use to copy the contents of current stream to target stream. Here is my extension method.

It is my working draft and it is possible that there must be some more checks before we can say this extension method is ready to be part of some API or class library.


public static void CopyTo(this Stream fromStream, Stream toStream)
{
   
if (fromStream == null
)
       
throw new ArgumentNullException("fromStream"
);
   
if (toStream == null
)
       
throw new ArgumentNullException("toStream"
);

   
var bytes = new byte
[8092];
   
int
dataRead;
   
while ((dataRead = fromStream.Read(bytes, 0, bytes.Length)) > 0)
        toStream.Write(bytes, 0, dataRead);
}

And here is example how to use this extension method.


using (var stream = response.GetResponseStream())
using (var ms = new MemoryStream
())
{
    stream.CopyTo(ms);

   
// Do something with copied data
}

I am using this code to copy data from HTTP response stream to memory stream because I have to use serializer that needs more than response stream is able to offer.


One thought on “Stream.CopyTo() extension method

  • Zuba says:

    Somehow, in NET 4.0, this exact method ended up being instance method on System.IO.Stream class…

Leave a Reply

Your email address will not be published. Required fields are marked *