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

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

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

Студворк — интернет-сервис помощи студентам
Приветствую. Не могу понять в чем дело. Есть сайт с которого нужно скачать ставки риска (за последние пол года). Формируются они скриптом в который подставляются начальная и конечная даты. Диапазон дат задать нельзя т.к. файл создается максимум на 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2017, 12:57
Ответы с готовыми решениями:

Пустой WebRequest при скачивании файлов в WebClient
При скачивании файлов методом DownloadFile, WebClient временами получает пустой WebRequest и в итоге процесс стопорится. Ссылки задаются...

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

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

9
Эксперт .NET
 Аватар для Rius
13092 / 7651 / 1672
Регистрация: 25.05.2015
Сообщений: 23,305
Записей в блоге: 14
14.11.2017, 13:23
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Относительный путь. При запуске в других условиях может выйти вам боком.
Вижу только один вариант при котором это может вызвать проблемы. Если прога лежит на диске "С" и запускается с правами пользователя (следовательно прав на запись не будет). На крайняк можно использовать путь к текущему каталогу пользователя.

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

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

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

Решение

Почти. Не +, а Path.Combine. И ".\\temp" не нужно, потому что путь и так ко временной папке. В ней сразу можно файлы создавать.
И раз уж речь о временных файлах, то есть Метод Path.GetTempFileName (), который сразу создаёт файл со случайным именем. В который вы скачиваете, читаете где надо, и удаляете файл.
Если вдруг файлы не нужны, можно прямо в переменную в ОЗУ скачивать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.11.2017, 15:58
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru