Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
21 / 19 / 4
Регистрация: 15.01.2015
Сообщений: 202
1

WebClient зависает при скачивании второго файла

14.11.2017, 12:57. Показов 2685. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую. Не могу понять в чем дело. Есть сайт с которого нужно скачать ставки риска (за последние пол года). Формируются они скриптом в который подставляются начальная и конечная даты. Диапазон дат задать нельзя т.к. файл создается максимум на 10004 строки. Приходиться скачивать за каждую дату отдельно... Соответственно делаю циклом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static void downloadFile(DateTime dateFrom, DateTime dateTo)
        {
            int count = 0;
            while (dateFrom < dateTo)
            {
                string link = null;
                using (WebClient downloder = new WebClient())
                {
                    link = "http://www.nkcbank.ru/securIndRatesSecurCsv.do?secur=&dateFrom=" + dateFrom + "&dateTo=" + dateFrom;
                    downloder.OpenRead(link);
                    downloder.DownloadFile(link, ".\\temp\\file" + count++ + ".csv");
                    downloder.Dispose();
                }
                    dateFrom = dateFrom.AddDays(1);
            }
        }
Первый файл скачивается без проблем, при загрузке второго долго висит и вылетает по таймауту.

Добавлено через 8 минут
Разобрался.
Оказывается
C#
1
downloder.OpenRead(link);
был не нужен.

Добавлено через 9 минут
В итоге сделал так (вдруг кому пригодиться)
C#
1
2
3
4
5
6
7
8
9
10
11
12
        static void downloadFile(DateTime dateFrom, DateTime dateTo)
        {
            while (dateFrom < dateTo)
            {
                string link = "http://www.nkcbank.ru/securIndRatesSecurCsv.do?secur=&dateFrom=" + dateFrom + "&dateTo=" + dateFrom;
                using (WebClient downloder = new WebClient())
                {
                    downloder.DownloadFile(link, ".\\temp\\" + dateFrom.Date.ToString("dd-MM-yyyy") + ".csv");
                }
                dateFrom = dateFrom.AddDays(1);
            }
        }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.11.2017, 12:57
Ответы с готовыми решениями:

Пустой WebRequest при скачивании файлов в WebClient
При скачивании файлов методом DownloadFile, WebClient временами получает пустой WebRequest и в...

Исключение во время запроса WebClient при скачивании файла
При первом нажатии на кнопку данный код работает как нужно string data =...

Зависает при попытке передачи второго файла
Первый файл программа закачивает отлично, при попытке передать второй зависает. procedure...

Зависает винда при скачивании
В общем купил жёсткий SSD,установил на него Windows 7,винда рабочая,уже много раз юзаная и когда...

9
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,662
Записей в блоге: 14
14.11.2017, 13:23 2
Цитата Сообщение от yagami2 Посмотреть сообщение
".\\temp"
Относительный путь. При запуске в других условиях может выйти вам боком.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
DateTime dateFrom = DateTime.Now;
string savePath = "R:\\";
 
using (var downloader = new WebClient())
{
    downloader.QueryString.Add("dateFrom", dateFrom.ToString("dd-MM-yyyy"));
    downloader.QueryString.Add("dateTo", dateFrom /* .AddDays(1) */ .ToString("dd-MM-yyyy"));
 
    //string res = downloader.DownloadString("http://www.nkcbank.ru/securIndRatesSecurCsv.do");
    downloader.DownloadFile(
        "http://www.nkcbank.ru/securIndRatesSecurCsv.do",
        Path.Combine(savePath, string.Format("{0:dd-MM-yyyy}.csv", dateFrom)));
}
0
21 / 19 / 4
Регистрация: 15.01.2015
Сообщений: 202
15.11.2017, 09:00  [ТС] 3
Цитата Сообщение от Rius Посмотреть сообщение
Относительный путь. При запуске в других условиях может выйти вам боком.
Вижу только один вариант при котором это может вызвать проблемы. Если прога лежит на диске "С" и запускается с правами пользователя (следовательно прав на запись не будет). На крайняк можно использовать путь к текущему каталогу пользователя.

А вот при использовании прямых путей (и уж тем более использование букв диска ) может действительно создать проблему на пустом месте.

Но это как говориться ИМХО.

А за пример спасибо.
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,662
Записей в блоге: 14
15.11.2017, 09:11 4
Цитата Сообщение от yagami2 Посмотреть сообщение
Вижу только один вариант при котором это может вызвать проблемы.
Вот поэтому и используете, что истинной проблемы не видите. Вы, как и многие (до возникновения "почему у меня ничего не работает!?!?"), полагаете, что CurrentDirectory это каталог, откуда запущена программа.
А это так лишь в редких частных случаях, когда программа запускается из отладчика VS, либо из командной строки в текущем каталоге, либо в ярлыке прописана установка текущего каталога для запускаемого процесса.
Во всех остальных CurrentDirectory указывает куда угодно, только не туда, куда вы предполагали при написании программы. И может меняться в ходе работы программы.
Новички постоянно натыкаются на это.
0
управление сложностью
1687 / 1300 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
15.11.2017, 13:04 5
Цитата Сообщение от Rius Посмотреть сообщение
Новички постоянно натыкаются на это.
Видимо потому что не понимают, что CurrentDirectory - это текущая директория системы(проводника), т.е. это некий флаг, отображающий последнюю открытую директорию откуда угодно
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,662
Записей в блоге: 14
15.11.2017, 13:30 6
Цитата Сообщение от yagami2 Посмотреть сообщение
А вот при использовании прямых путей (и уж тем более использование букв диска ) может действительно создать проблему на пустом месте.
Тем не менее, абсолютные пути - правильный выход.
А вы, видимо, путаете сами абсолютные пути (которые можно определить во время выполнения) и хардкодинг путей в тексте программы.
0
21 / 19 / 4
Регистрация: 15.01.2015
Сообщений: 202
15.11.2017, 15:09  [ТС] 7
Цитата Сообщение от Rius Посмотреть сообщение
путаете сами абсолютные пути (которые можно определить во время выполнения)
Что вы имеете в виду?
Типа этого Environment.SpecialFolder.UserProfile ?
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,662
Записей в блоге: 14
15.11.2017, 15:29 8
Типа этого, получение каталогов в профиле пользователя. Их там несколько разных.
И типа вот этого - Получить путь к папке приложения, самый простой вариант.
Получив базовый путь, можно создать путь ко вложенным каталогам и файлам через метод Path.Combine, вместо простой конкатенации строк.
0
21 / 19 / 4
Регистрация: 15.01.2015
Сообщений: 202
15.11.2017, 15:37  [ТС] 9
т.е. в моем варианте вместо ".\\temp" нужно использовать Path.GetTempPath+"\\temp" ?
0
Эксперт .NET
10566 / 6490 / 1506
Регистрация: 25.05.2015
Сообщений: 19,662
Записей в блоге: 14
15.11.2017, 15:58 10
Лучший ответ Сообщение было отмечено yagami2 как решение

Решение

Почти. Не +, а Path.Combine. И ".\\temp" не нужно, потому что путь и так ко временной папке. В ней сразу можно файлы создавать.
И раз уж речь о временных файлах, то есть Метод Path.GetTempFileName (), который сразу создаёт файл со случайным именем. В который вы скачиваете, читаете где надо, и удаляете файл.
Если вдруг файлы не нужны, можно прямо в переменную в ОЗУ скачивать.
0
15.11.2017, 15:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2017, 15:58
Помогаю со студенческими работами здесь

ОС зависает намертво при скачивании игры
Компьютер стал зависать после того как я начал скачивать игру Блек дезерт с клиента на системный...

Компьютер периодически зависает при скачивании файлов и установке программ
Здравствуйте, вообщем проблема в том что когда я что то скачиваю или устанавливаю, комп...

Как протестировать внешний жесткий диск? (Зависает при прямом скачивании торрента на него)
Вообщем с диском что-то случилось. Заметил когда как и всегда начал прямиком качать туда фильм....

Периодически зависает компьютер: при копировании файлов, просмотре видео, скачивании чего-либо из DC++, а также в играх и интернете.
Периодически зависает компьютер: при копировании файлов, просмотре видео, скачивании чего-либо из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru