Название: Скачать много файлов QNetworkAccessManager Отправлено: yandzee от Сентябрь 12, 2011, 21:25 Имеется такая непростая ситуация:
На хосте (http) лежат около 30 файлов (да неважно сколько). Их надо скачать QNetworkAccessManager'ом. Не много не понятно использование QNetworkReply. Если я запущу загрузку по циклу вот так: for(int n = 1;n<30; n++) { p_folders_reply = pmanager->get(QNetworkRequest(QUrl("http://host.ru/file"+QString::number(n)+".html"))); } То как потом все считать в файлы? Название: Re: Скачать много файлов QNetworkAccessManager Отправлено: kambala от Сентябрь 12, 2011, 21:54 Код
Название: Re: Скачать много файлов QNetworkAccessManager Отправлено: BRE от Сентябрь 12, 2011, 22:01 Все таки лучше обрабатывать readyRead и сохранять файлы на диск приходящими кусками, а не ждать полной загрузки файлы.
Мы не знаем какого размера файлы будут передаваться (может это десятки или сотни гигабайт), а при ожидании сигнала finished данные загружаются в оперативку, которая все еще не бесконечная. Название: Re: Скачать много файлов QNetworkAccessManager Отправлено: yandzee от Сентябрь 12, 2011, 22:11 Спасибо!
Цитировать Все таки лучше обрабатывать readyRead connect(reply, SIGNAL(readyRead()), SLOT(readData()));for(int n = 1;n<30; n++) { p_folders_reply = pmanager->get(QNetworkRequest(QUrl("http://journal.j-art.ru/p/data/nomer"+QString::number(i)+"/"+QString::number(n)+".html"))); } .... что-то вроде того? Название: Re: Скачать много файлов QNetworkAccessManager Отправлено: BRE от Сентябрь 12, 2011, 22:14 Ну это скорее что то вроде этого. :)
Код
Название: Re: Скачать много файлов QNetworkAccessManager Отправлено: kambala от Сентябрь 12, 2011, 22:23 Все таки лучше обрабатывать readyRead и сохранять файлы на диск приходящими кусками, а не ждать полной загрузки файлы. согласен. то я брал код из загрузчика страничек, хотя автору он как раз и сгодится, судя по расширению скачиваемых файлов.Название: Re: Скачать много файлов QNetworkAccessManager Отправлено: yandzee от Сентябрь 13, 2011, 14:57 Да, еще зыбыл спросить:
Например на хосте есть файлы: 1.html 2.html 3.html 5.html 6.html for(int i=1;i<7;i++) { QNetworkReply *reply = downloader->get("http://host.ru/"+QString::number(i)+".html"); connect(reply, SIGNAL(readyRead()), SLOT(readData())); } Что произойдет когда обнаружится что файла 4.html нет? тупо сигнал readyRead не будет выслан? Название: Re: Скачать много файлов QNetworkAccessManager Отправлено: kambala от Сентябрь 13, 2011, 15:46 да, будет отправлен другой сигнал - error(QNetworkReply::NetworkError code)
Название: Re: Скачать много файлов QNetworkAccessManager Отправлено: fuCtor от Сентябрь 18, 2011, 17:30 На тему как отличить в какой файл писать:
после отправки запроса, в QNetworkReply можно в динамическое property положить нужное значение (указатель на QFile, либо имя файла), а при получении сигнала читать значение и уже писать куда надо. Получится довольно универсально. |