Название: загрузить html файл по ссылке Отправлено: sobr_vamp от Июнь 17, 2011, 20:39 Обращаюсь к API яндекса, нахожу результаты.
Есть ссылка на страницу и сохранённая ссылка (на всякий пожарный =) Нужен инстумент для сохранения html по ссылке на жесткий диск. Направьте пожалуйста, куда копать и что лучше использовать. Важен текст; картинки и остальную чепуху можно и, наверно, нужно не загружать. Спасибо. Название: Re: загрузить html файл по ссылке Отправлено: kambala от Июнь 17, 2011, 21:17 я когда-то так делал, но не знаю насколько это правильно:
Код
Код
Название: Re: загрузить html файл по ссылке Отправлено: sobr_vamp от Июнь 17, 2011, 21:39 Спасибо
Название: Re: загрузить html файл по ссылке Отправлено: thechicho от Ноябрь 30, 2011, 16:48 а зачем
Код
и Код
у reply же предок qnam. т.е. раз qnam создается в куче, то удалять надо qnam? или забить, удалится с выходом из приложения. + зачем к нулю присваивать? какая тут логика? имхо, надо делать так: .h Код
.cpp Код
Название: Re: загрузить html файл по ссылке Отправлено: kambala от Ноябрь 30, 2011, 17:24 а зачем так данные явно сохраняются на диск. без этого мне приходилось ждать пока консольная программа завершится, чтобы файл записался (под виндой точно).Код
и Код
у reply же предок qnam. т.е. раз qnam создается в куче, то удалять надо qnam? или забить, удалится с выходом из приложения. + зачем к нулю присваивать? какая тут логика? Цитировать Note: After the request has finished, it is the responsibility of the user to delete the QNetworkReply object at an appropriate time. Do not directly delete it inside the slot connected to finished(). You can use the deleteLater() function. а присваивание в 0 - на всякий случайНазвание: Re: загрузить html файл по ссылке Отправлено: thechicho от Ноябрь 30, 2011, 19:05 а почему file.write(reply->readAll());
сразу не записывает в файл? write разве не синхронная функция?.. тогда, наверное, если все же использовать file.flush(); file.write(reply->readAll()); будет лишним. QFile file("file.htm"); if (file.open(QIODevice::WriteOnly)) { file.flush(); file.close(); } Название: Re: загрузить html файл по ссылке Отправлено: kambala от Ноябрь 30, 2011, 19:22 тогда, наверное, если все же использовать file.flush(); данные из воздуха не возьмутся. flush() "Flushes any buffered data to the file".file.write(reply->readAll()); будет лишним. Название: Re: загрузить html файл по ссылке Отправлено: thechicho от Ноябрь 30, 2011, 21:26 а точно
Код
Название: Re: загрузить html файл по ссылке Отправлено: kambala от Ноябрь 30, 2011, 22:22 а записывать кто данные будет в файл - Пушкин?
Название: Re: загрузить html файл по ссылке Отправлено: BRE от Ноябрь 30, 2011, 22:36 Я не знаю, что вы обсуждаете, но закрытие файла автоматически делает flush. :)
Кстати, при разрушении QFile файл автоматически будет закрыт (соответственно с flush). Достаточно такого: Код
Название: Re: загрузить html файл по ссылке Отправлено: thechicho от Ноябрь 30, 2011, 23:03 дак,
reply->readAll(); - запишет данные в буфер. file.flush(); - запишет из буфера в файл. так ведь?) BRE, kambala сказал, что "так данные явно сохраняются на диск. без этого мне приходилось ждать пока консольная программа завершится, чтобы файл записался (под виндой точно)". поэтому не канает, твой вариант, т.к. по словам kambala, данные запишутся только после выхода из консоли, а нам тип надо, чтобы сразу записались :) kambala, твой никнейм склонять можно?) Название: Re: загрузить html файл по ссылке Отправлено: thechicho от Ноябрь 30, 2011, 23:06 Код
ы Название: Re: загрузить html файл по ссылке Отправлено: kambala от Ноябрь 30, 2011, 23:06 Я не знаю, что вы обсуждаете, но закрытие файла автоматически делает flush. :) ну у меня почему-то файл не записывался сразу, а только по завершении консольного приложения (в main() я просто создавал объект типа PageDownloader и вызывал app.exec()), потому я доставил flush() - хуже-то точно не будет от него :)дак, ну так в QFile и находится буфер, а readAll() возвращает байт-массив, который надо куда-то (в наш буфер) записатьreply->readAll(); - запишет данные в буфер. file.flush(); - запишет из буфера в файл. kambala, твой никнейм склонять можно?) можноНазвание: Re: загрузить html файл по ссылке Отправлено: thechicho от Ноябрь 30, 2011, 23:10 // ну так в QFile и находится буфер, а readAll() возвращает байт-массив, который надо куда-то (в наш буфер) записать
ааа ну тогда, ты прав :) flush(); юзаем, если необходима мгновенная запись из консоли Название: Re: загрузить html файл по ссылке Отправлено: BRE от Ноябрь 30, 2011, 23:12 ну у меня почему-то файл не записывался сразу, а только по завершении консольного приложения (в main() я просто создавал объект типа PageDownloader и вызывал app.exec()), потому я доставил flush() - хуже-то точно не будет от него :) Возможно время жизни объекта QFile было равно жизни программы.Сейчас же время жизни ограничивается слотом httpFinished. А хуже конечно не будет. :) Название: Re: загрузить html файл по ссылке Отправлено: nekitozzz от Декабрь 12, 2011, 21:38 Тоже интересует эта тема, не могу понять, зачем у меня при запуске программа даже в httpFinished не заходит :(
Код
Код
Код
|