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)); }
Правильно ли я предполагаю, что могу просто пропустить количество байтов, если данный файл уже существует на компьютере, чтобы "продолжить" загрузку, например, при перезагрузке моего приложения?
Другими словами, могу ли я просто определить размер существующего файла и добавить его в качестве "диапазона" к веб-запросу?
Я хотел бы отметить, что речь идет не о приостановке/возобновлении загрузки, а о возможности продолжить с того места, где она была прервана, в случае неожиданного отключения программного обеспечения. Таким образом, вы можете назвать это "повторной попыткой", но не начинать все с самого начала.
Что я уже пробовал:
Я предоставил код для текущего прогресса.