Seite 1 von 1

Datei aus dem Netz herunterladen

Verfasst: 26. Juli 2010 17:08
von GoaSkin
Hallo,

ich versuche verzweifelt ein paar Zeilen Code zum Laufen zu bringen, die eine Datei auf einem Webserver lokal speichern sollen:

Code: Alles auswählen

                QFile file("download.xml");
                file.open(QIODevice::WriteOnly);
                QNetworkAccessManager manager;
                QNetworkRequest request;
                request.setUrl(download);
                QNetworkReply *reply = manager.get(request);
                QByteArray data(reply->readAll());
                file.write(data);
                file.close();
Das Problem: Es werden keine Daten gezogen und eine Datei mit der Länge 0 Bytes gespeichert. Zuvor habe ich das gleiche mit QHttp versucht - selbes Ergebnis. Da hatte die Eigenschaft errorString des QHttp-Objekts den Wert "unknown error". Jemand eine Idee?

Verfasst: 26. Juli 2010 17:14
von pfid
Die Doku inklusive Beispiele hast du dir natürlich durchgelesen, oder?

http://doc.trolltech.com/4.6/qnetworkaccessmanager.html

Verfasst: 26. Juli 2010 22:04
von GoaSkin
Klar... und wirklich weiter helfen tut diese Doku auch nicht. Bin schon mehrere Beispiele durchgegangen und habe es auch mit der alten QHttp-Methode probiert.
Muss ja auch beim Network-Access-Manager eine Lösung geben, ohne dass man da noch eine Extra Slot-Funktion braucht.

Verfasst: 27. Juli 2010 06:29
von Christian81
Nein, QHttp und QNetworkAccessManager sind asynchron.

Verfasst: 28. Juli 2010 00:18
von GoaSkin
Hat sich erledigt und geht auch synchron. So funktionierts (Lösung basiert auch nur auf einer Beschreibung aus dem Netz):

Code: Alles auswählen

void DSBrowser::doDownload(QUrl download)
        {
        QNetworkAccessManager manager;
        QNetworkRequest request;
        request.setUrl(download);
        QEventLoop loop;
        QNetworkReply *reply = manager.get(request);
        QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
        loop.exec();
        QFile file("download.xml");
        file.open(QIODevice::WriteOnly);
        file.write(reply->readAll());
        file.close();
        delete reply;
        }