This stream does not support seek operations. HttpWebResponse

JFoulkes picture JFoulkes · Sep 17, 2009 · Viewed 15.3k times · Source

I'm making a program which downloads files over http.

I've got it downloading, however I want to be able to pause the downloads, close the program and resume them again at a later date.

I know the location i'm downloading them from supports this.

I'm downloading the file through HttpWebResponse and reading the response into a Stream using GetResponseStream.

When i close the app and restart it, I'm stuck as to how resume the download. I've tried doing a seek on the stream but it states its not supported.

What would be the best way to do this?

Answer

Darin Dimitrov picture Darin Dimitrov · Sep 17, 2009

If the server supports this you have to send the Range Http header with your request using the AddRange method:

request.AddRange(1024);

This will instruct the server to start sending the file after the 1st kilobyte. Then just read the response stream as normal.

To test if a server supports resuming you can send a HEAD request and test if it sends the Accept-Ranges: bytes header.