Solved

Auto-resuming HTTP download C#

Posted on 2007-04-09
1
2,981 Views
Last Modified: 2013-12-17
In C#, is there a simple way to resume an download over http, transparantly?

For example, i call a function to download a file x to drive c:. In the middle of the operation, I close the downloading program. The program would abort the transfer, but not delete the partially downladed file x.

I start the program, and once again call the function to download the same file x to driver c:. The function would realize that there is already a part of file x present on drive c: and then resume the download.

Anything simple in .NET 2.0 library that would allow that to happen?
0
Comment
Question by:krupini
1 Comment
 
LVL 11

Accepted Solution

by:
dready earned 500 total points
Comment Utility
The way to go, is first to check if the file allready exists on you computer, and if so, determine the length. What you want to do, is something like


if (File.Exists(txtPath.Text))
{
    startPoint = new FileInfo(txtPath.Text).Length;
}
else
{
    startPoint = 0;
}

Then you download using the startPoint value. Your download function could look like the following.
I copied the relevant code from the following URL: http://www.geekpedia.com/tutorial196_Creating-an-advanced-download-manager-in-Csharp.html



private void Download(object startPoint)

{

    try

    {
        // Put the object argument into an int variable

        int startPointInt = Convert.ToInt32(startPoint);

        // Create a request to the file we are downloading

        webRequest = (HttpWebRequest)WebRequest.Create(txtUrl.Text);

        // Set the starting point of the request

        webRequest.AddRange(startPointInt);

 

        // Set default authentication for retrieving the file

        webRequest.Credentials = CredentialCache.DefaultCredentials;

        // Retrieve the response from the server

        webResponse = (HttpWebResponse)webRequest.GetResponse();

        // Ask the server for the file size and store it

        Int64 fileSize = webResponse.ContentLength;

 

        // Open the URL for download

        strResponse = webResponse.GetResponseStream();

 

        // Create a new file stream where we will be saving the data (local drive)

        if (startPointInt == 0)

        {

            strLocal = new FileStream(txtPath.Text, FileMode.Create, FileAccess.Write, FileShare.None);

        }

        else

        {

            strLocal = new FileStream(txtPath.Text, FileMode.Append, FileAccess.Write, FileShare.None);

        }

 

        // It will store the current number of bytes we retrieved from the server

        int bytesSize = 0;

        // A buffer for storing and writing the data retrieved from the server

        byte[] downBuffer = new byte[2048];

 

        // Loop through the buffer until the buffer is empty

        while ((bytesSize = strResponse.Read(downBuffer, 0, downBuffer.Length)) > 0)

        {

            // Write the data from the buffer to the local hard drive

            strLocal.Write(downBuffer, 0, bytesSize);

            // Invoke the method that updates the form's label and progress bar

            this.Invoke(new UpdateProgessCallback(this.UpdateProgress), new object[] { strLocal.Length, fileSize + startPointInt });

 

            if (goPause == true)

            {

                break;

            }

        }

    }

    finally

    {

        // When the above code has ended, close the streams

        strResponse.Close();

        strLocal.Close();

    }

}


http://www.geekpedia.com/tutorial196_Creating-an-advanced-download-manager-in-Csharp.html
0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

Suggested Solutions

A basic question.. “What is the Garbage Collector?” The usual answer given back: “Garbage collector is a background thread run by the CLR for freeing up the memory space used by the objects which are no longer used by the program.” I wondered …
Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now