Seite 1 von 1

QHttp Download (nicht im Hintergrund)

Verfasst: 18. Mai 2013 15:07
von rafael9707s
Ich schreibe gerade eine QCoreApplication die als Updater arbeitet.

Der Updater soll Dateien laden, aber (!nicht!) im Hintergrund, hatte schon eine eigene Klasse geschreiben hatte aber Problem mit UTF-8 und ASCII unterscheidung.

Der Wert headere wird über foreach gegeben, das geht ja auch.

Code: Alles auswählen

foreach(headere, headerl)
        {
            if (headere.left(4) == "file")
            {
                headere.remove("file <");
                headere.remove(">");
                std::cout << QString("Remove old " + headere).toStdString();
                if (flv.remove(headere))
                {
                    std::cout << " [done]\n";
                }
                else
                {
                    std::cout << " [failed]\n";
                }
                std::cout << QString("Download new " + headere).toStdString();
                QHttp http;
                QFile fld;
                fld.setFileName(fod + "/" + headere);
                fld.open(QFile::WriteOnly);
                http.setHost("derhost");
                http.get("/update/sfiles/" + headere);
                waitForFinished:
                if (http.state() != http.Unconnected)
                {
                    Xsleep::msleep(500);
                    std::cout << ".";
                    goto waitForFinished;
                }
                fld.write(http.readAll());
                fld.close();
                std::cout << " [done]\n";
            }
      }
Datei wird erstellt aber nicht beschrieben, Google und Forumsuche konnte mir nicht helfen, danke wenn jemand mir hier bei helfen könnte :D

Re: QHttp Download (nicht im Hintergrund)

Verfasst: 18. Mai 2013 18:31
von Christian81
1. Warum QHttp und icht das aktuellere QNetworkAccessManager
2. QHttp::readAll() liefert nur die Daten die aktuell vorhanden sind, das müssen nicht zwangsläufig alle sein - du wartest ja nur bis connected ist und gehst dann einfach davon aus dass damit auch alle Daten heruntergeladen sind - so ein Netz hätte ich auch gern.
3. Was genau spricht gegen die asynchron?
4. goto !? sorry aber Basic war vor 30 Jahren ... sorry aber das ist Müll

Re: QHttp Download (nicht im Hintergrund)

Verfasst: 18. Mai 2013 19:37
von rafael9707s
Das mit den Ersatz habe ich schon länger entdeckt, ich schlage gerade bei diesen Code fehl

Code: Alles auswählen

                QNetworkAccessManager http;
                QNetworkReply reply;
                QFile fld;
                fld.setFileeName(fod + "/" + headere);
                fld.open(QFile::WriteOnly);
                reply = http.get(QUrl("http://domain/update/sfiles/" + headere));
                waitForFinished:
                if (!reply.isFinished())
                {
                    Xsleep::msleep(500);
                    std::cout << ".";
                    goto waitForFinished;
                }
                fld.write(reply.readAll());
                fld.close();
                std::cout << " [done]\n";

Re: QHttp Download (nicht im Hintergrund)

Verfasst: 18. Mai 2013 19:52
von Christian81
Sorry aber beschäftige Dich bitte erst einmal mit den Grundlagen von Qt - besonders die Bedeutung der Qt Eventloop.
Sleep und Goto sind definitiv ein No-Go. Und die Synchronität ist auch total unnötig...