Datei aus dem Netz herunterladen

Alles rund um die Programmierung mit Qt
Antworten
GoaSkin
Beiträge: 103
Registriert: 13. Juni 2007 00:14
Wohnort: Darmstadt

Datei aus dem Netz herunterladen

Beitrag 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?
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Die Doku inklusive Beispiele hast du dir natürlich durchgelesen, oder?

http://doc.trolltech.com/4.6/qnetworkaccessmanager.html
GoaSkin
Beiträge: 103
Registriert: 13. Juni 2007 00:14
Wohnort: Darmstadt

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Nein, QHttp und QNetworkAccessManager sind asynchron.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
GoaSkin
Beiträge: 103
Registriert: 13. Juni 2007 00:14
Wohnort: Darmstadt

Beitrag 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;
        }
Antworten