Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QNetworkAccessManager - определить отсутствие, файла и прогресс загрузки 
V
    Опции темы
loneybibi
  Дата 15.6.2011, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

Репутация: 3
Всего: 3



Здравствуйте, уважаемые! smile
Вот есть функция скачивания файла с помощью QNetworkAccessManager.
Подскажите пожалуйста как определить существует ли файл на удаленном компьютере и прогресс его загрузки!? 

Еще почему то на линуксе при загрузке файла таким способо (в моем случае DLL библиотеки) она перестает работать .. хотя размер файла совпадает..

Код

    void downloadFileFromUrl(const QString fileName){
        QNetworkAccessManager networkManager;
        QNetworkRequest request;
        request.setUrl(QUrl(fileName));
        QNetworkReply *reply(networkManager.get(QNetworkRequest(request)));
        QEventLoop loop;
        connect(&networkManager,SIGNAL(finished(QNetworkReply*)),&loop,SLOT(quit()));
        loop.exec();
        reply->deleteLater();
        QByteArray buffer;
        buffer=reply->readAll();
        QFile file("text.txt");
        if(file.open(QIODevice::WriteOnly))
        {
            file.write(buffer);
        }




Это сообщение отредактировал(а) loneybibi - 16.6.2011, 14:12


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
loneybibi
  Дата 17.6.2011, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

Репутация: 3
Всего: 3



Подскажите кто знает почему файл(библиотека .so) загруженный на линуксе таким способом может не работать ? происходит ошибка сегментирования ? Как правильно скачать файл или что я не так делаю ? На windows все работает нормально ((( 


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
loneybibi
Дата 18.6.2011, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.5.2010
Где: Донецк (Украина)

Репутация: 3
Всего: 3



Нашел из за чего была проблема в том что файл не корректно закачивался.

На linux почему то если файл уже существует и мы его перезаписываем то запись файла будет произведена не корректно.

Для текстовых файлов это не критично, по крайней мере изменений не было замечено, а вот динамические библиотеки не работали. 

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

В итоге получилось так:
Код

class downloadFileFromUrl:public QObject
{
    Q_OBJECT
    QNetworkAccessManager manager;
    QNetworkReply *reply;

public:
    downloadFileFromUrl(const QUrl &url){
        connect(&manager,SIGNAL(finished(QNetworkReply*)),SLOT(downloadFinished(QNetworkReply*)));
        QNetworkRequest request(url);
        reply=manager.get(request);
    }

    bool writeFileToDisk(const QString &fileName,QIODevice *data)
    {
        QFile file(fileName);
        if(file.exists()){
            file.remove();
        }

        if(file.open(QIODevice::WriteOnly)){
            file.write(data->readAll());
            file.close();
        } else return(false);
        return true;
    }

public slots:
    void downloadFinished(QNetworkReply *reply)
    {
        writeFileToDisk(QFileInfo(reply->url().path()).fileName(),reply);
        reply->deleteLater();
    }

};


С определением существует ли файл на удаленном компьютере тоже разобрался. Проверкой QNetworkReply::error на ошибки. 

С прогрессом загрузки вроде как тоже, нашел функцию у QNetworkReply::downloadProgress(qint64,qint64), но еще не копался.


--------------------
Red Hat Fedora 17
Qt 4.8.1 (x64), GCC 4.4.3,
G++ 4.4.3, QtCreator 2.4.1
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0878 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.