Загрузка файлов из List при помощи WebClient

51
12 января 2018, 23:03

Добрый день, помогите разобраться как правильно сделать загрузку файлов по коллекции ссылок. Есть вот такой вот список:

public List <string> MusicFilesList()
{
var links = new List<string>();
links.Add("http://mysite.com/music.mp3");
links.Add("http://mysite.com/music.mp3");
links.Add("http://mysite.com/music.mp3");
links.Add("http://mysite.com/music.mp3");
links.Add("http://mysite.com/music.mp3");
links.Add("http://mysite.com/music.mp3");
return links;
}

На форме есть прогресс бар и кнопка, которая начинает загрузку.

private void downloadMusic_Click(object sender, EventArgs e)
    {
        foreach(var link in MusicFilesList())
        {
            Downloader(link, );
        }
    }

И метод который скачивает

private void Downloader(string link, string filepath)
    {
        using (WebClient wc = new WebClient())
        {
            wc.DownloadProgressChanged += Wc_DownloadProgressChanged;
            wc.DownloadFileCompleted += Wc_DownloadFileCompleted;
            wc.DownloadFileAsync(new Uri(link), filepath);
        }
    }

Как мне указать куда скачивать? Если один файл скачать, то я использую SaveFileDialog. А для большого количества файлов не могу сделать, что бы просто указал папку куда и он сам качал.

Update. Вот так у меня происходит загрузка одного файла.

   private void downloadPhoto_Click(object sender, EventArgs e)
    {
        using (var dialog = new SaveFileDialog())
        {
            dialog.Filter = "MusicFile|*.mp3";
            dialog.Title = "Сохранить как";
            dialog.FileName = fileName;
            var result = dialog.ShowDialog();
            if(result == DialogResult.OK)
            {
                Downloader(musicLink, dialog.FileName);
            }
        }
    }

С Folder вот что я соорудил, но качает он один файл всего лишь.

private void downloadAlbum_Click(object sender, EventArgs e)
    {
        using (var dialog = new FolderBrowserDialog())
        {
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                foreach (var link in MusicFilesList())
                {
                    fileName = $"{musiclist.SelectedItem.ToString().Split('/')[6]}";
                    using (var wc = new WebClient())
                    {
                        wc.DownloadFile(link.ToString(), dialog.SelectedPath + "/" + fileName);
                    }
                }
            }
        }
    }
Answer 1

Не внимательно писал код.

private void downloadAlbum_Click(object sender, EventArgs e)
    {
        using (var dialog = new FolderBrowserDialog())
        {
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                foreach (var link in MusicFilesList())
                {
                    fileName = $"{link.ToString().Split('/')[6]}";
                    using (var wc = new WebClient())
                    {
                        wc.DownloadFile(link.ToString(), dialog.SelectedPath + "/" + fileName);
                    }
                }
            }
        }
    }

В таком случае качает все как положено.

READ ALSO
Некорректная работа обработчика ASP.NET

Некорректная работа обработчика ASP.NET

ЗдравствуйтеЕсть проблема

77
Xamarin.Forms в VS Community 2017 ошибки

Xamarin.Forms в VS Community 2017 ошибки

Разрабатывал проект и в какой-то момент он перестал компилитьсяТак как студия не пишет по-человечески, в чём конкретно по её мнению ошибка,...

47
Большой файл скачивается не полностью

Большой файл скачивается не полностью

Есть файл(*rar) доступный по url

84
TCP связь с сервером

TCP связь с сервером

Имеется обычный и серверный клиент для многопользовательского чата(простой и в консоли), также есть ВДС(сервер) с установленной на нем Windows...

76