Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2016, 12:51   #1
DesQ
 
Аватар для DesQ
 
Регистрация: 17.09.2014
Сообщений: 4
По умолчанию Ftp с Progress Bar'om

Привет народ. Уже битые сутки бьюсь с прогресс баром. Как сделать что бы он отображал статус загрузки? Пожалуйста, помогите, желательно с примером.

Код:
 private void button1_Click(object sender, EventArgs e)
        {
            string ftpUserID = "1111";
            string ftpPassword = "1111";
            string path = "1111";
            string to = "test.rar"; // путь куда сохранять
            try
            {
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(path);
                request.Method = WebRequestMethods.Ftp.DownloadFile;
                request.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                Stream responseStream = response.GetResponseStream();
                FileStream file = File.Create(to);
                // Получаем вес файла
                FtpWebRequest requests = (FtpWebRequest)FtpWebRequest.Create(new Uri("111"));
                requests.Credentials = new NetworkCredential("1111", "1111");
                requests.Method = WebRequestMethods.Ftp.GetFileSize;
                requests.UseBinary = true;
                FtpWebResponse respSize = (FtpWebResponse)requests.GetResponse();
                long size = respSize.ContentLength;
                progressBar1.Maximum = Convert.ToInt32(size);

                byte[] buffer = new byte[512 * 1024];
                int read;

                while ((read = responseStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                        file.Write(buffer, 0, read);
                }
                MessageBox.Show("Загрузка окончена!");
                file.Close();
                respSize.Close();
                responseStream.Close();
                response.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Ошибка загрузки файла!");
                return;
            }
DesQ вне форума Ответить с цитированием
Старый 07.04.2016, 14:03   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Для начала надо либо вынести все в отдельный поток (Task, async/await, BackgroundWorker, Thread, ...), либо использовать Begin...+End... методы FtpWebRequest.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 07.04.2016, 14:20   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Вот есть метод для выгрузки файла на фтп, немного переделать и получится так как вам нужно.

класс BackgroundWorker, в обработчике DoWork пишем:
Код:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    var ftpWebRequest = (FtpWebRequest)WebRequest.Create("ftp://example.com");
    ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;
    using (var inputStream = File.OpenRead(fileName))
    using (var outputStream = ftpWebRequest.GetRequestStream())
    {
        var buffer = new byte[1024 * 1024];
        int totalReadBytesCount = 0;
        int readBytesCount;
        while ((readBytesCount = inputStream.Read(buffer, 0, buffer.Length)) > 0)
        {
            outputStream.Write(buffer, 0, readBytesCount);
            totalReadBytesCount += readBytesCount;
            var progress = totalReadBytesCount * 100.0 / inputStream.Length;
            backgroundWorker1.ReportProgress((int)progress);
        }
    }
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    progressBar.Value = e.ProgressPercentage;
}
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Handle progress bar'a Berlioz Win Api 2 06.01.2013 21:01
Progress bar и кнопка Seger17 Общие вопросы Delphi 1 05.04.2011 21:07
Progress Bar Trizael Компоненты Delphi 3 07.12.2010 01:25
Progress bar SKS Компоненты Delphi 10 15.08.2009 21:09
Progress Bar Alexander X Компоненты Delphi 2 17.12.2007 03:18