Member 11841791 Ответов: 0

C# webrequest - как бы я "продолжил" загрузку?


Эй Codeproject,

Я следил за парой статей о том, как создать функцию паузы/возобновления при моих загрузках, и в основном создавал загрузчик с нуля.

По-видимому, происходит то, что он запрашивает данные и записывает их в указанный файл. Я также могу пропустить заданное количество байтов.

Ниже приведен мой код загрузки:

/// <summary>
/// The worker function.
/// </summary>
private void Worker()
{
    const int chunkSize = 1024;

    // Create a web request to the download.
    var webRequest = (HttpWebRequest) WebRequest.Create(Download.Query);

    // Use default credentials
    webRequest.UseDefaultCredentials = true;
    webRequest.Method = "GET";
    webRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)";

    // Bytes or "progress" already read can be added here
    //webRequest.AddRange(range);

    // The current progress
    long progress = 0;

    // Create a new file stream to write to.
    using (var fileStream = new FileStream(Path, FileMode.CreateNew))
    {
        // Get the web response
        using (var myHttpWebResponse = (HttpWebResponse)webRequest.GetResponse())
        {
            // Get the recieve stream.
            using (var receiveStream = myHttpWebResponse.GetResponseStream())
            {
                var fileSize = myHttpWebResponse.ContentLength;

                // Create a new array with the size of our chunks.
                var read = new byte[chunkSize];

                // The amount of bytes we read.
                int count;

                // Read the bytes as long as we are downloading.
                while ((count = receiveStream.Read(read, 0, chunkSize)) > 0 && Downloading)
                {
                    fileStream.Write(read, 0, count);
                    progress += count;

                    OnDownloadProgressChanged?.Invoke(this, new ProgressChangedDownloadEvent(fileSize, progress));

                    if (Stopping)
                        break;
                }
            }


        }
    }

    // At this point the download finished unless we requested to stop.
    if(!Stopping)
     OnDownloadFinished?.Invoke(this, new DownloadFinishedEvent(Path));
}


Правильно ли я предполагаю, что могу просто пропустить количество байтов, если данный файл уже существует на компьютере, чтобы "продолжить" загрузку, например, при перезагрузке моего приложения?

Другими словами, могу ли я просто определить размер существующего файла и добавить его в качестве "диапазона" к веб-запросу?

Я хотел бы отметить, что речь идет не о приостановке/возобновлении загрузки, а о возможности продолжить с того места, где она была прервана, в случае неожиданного отключения программного обеспечения. Таким образом, вы можете назвать это "повторной попыткой", но не начинать все с самого начала.

Что я уже пробовал:

Я предоставил код для текущего прогресса.

0 Ответов