Pobieranie pliku jeden za drugim

0

Hej, chciałbym pobrać plik jeden za drugim. W jaki sposób to wykonać?
Moja metoda pobierania (+ aktualizacja progressbara):

string[] linki = {"link", "link", "link", "link", "link"};
        string[] pliki = { "C:\\s.part1.rar", "C:\\s.part2.rar", "C:\\s.part3.rar", "C:\\s.part4.rar", "C:\\s.part5.rar" };
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            string sUrlToReadFileFrom = linki[0];
            string sFilePathToWriteFileTo = pliki[0];
           Uri url = new Uri(sUrlToReadFileFrom);
            System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
            System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
            response.Close();
            Int64 iSize = response.ContentLength;
            Int64 iRunningByteTotal = 0;
            using (System.Net.WebClient client = new System.Net.WebClient())
            {
               using (System.IO.Stream streamRemote = client.OpenRead(new Uri(sUrlToReadFileFrom)))
                {
                    using (Stream streamLocal = new FileStream(sFilePathToWriteFileTo, FileMode.Create, FileAccess.Write, FileShare.None))
                    {
                        int iByteSize = 0;
                        byte[] byteBuffer = new byte[iSize];
                        while ((iByteSize = streamRemote.Read(byteBuffer, 0, byteBuffer.Length)) > 0)
                        {
                            streamLocal.Write(byteBuffer, 0, iByteSize);
                            iRunningByteTotal += iByteSize;
                            double dIndex = (double)(iRunningByteTotal);
                            double dTotal = (double)byteBuffer.Length;
                            double dProgressPercentage = (dIndex / dTotal);
                            int iProgressPercentage = (int)(dProgressPercentage * 100);
                            backgroundWorker1.ReportProgress(iProgressPercentage);
                        }
                        streamLocal.Close();
                    }
                    streamRemote.Close();
                }
            }
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {

            progressBar1.Value = e.ProgressPercentage;

        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {

            MessageBox.Show("Pobrano");

        }

Dzięki i pozdrawiam :-)

0

Nie słyszałeś o takim czymś jak pętla http://si-szarp.pl/kurs/podstawy-petli-for
Wszystko co teraz masz w procedurze dajesz w pętli i z tablic linki i pliki pobierasz i-ty element oczywiście na początku sprawdzasz jaka jest wielkość tablic bo pętla musi się wykonać tyle razy ile jest elementów tablicy. Dobrze by było sprawdzić obie tablice mają taką samą wielkość a jak nie to komunikat błędu czy coś.

0

Int64 iSize = response.ContentLength;
...
byte[] byteBuffer = new byte[iSize];

zdaje się, że masz z tym problem w innym temacie...

<code class="c#">response.Close();
Int64 iSize = response.ContentLength;

wtf? najpierw wchodzisz do domu, a dopiero potem zamykasz drzwi.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.