Seite 1 von 1

QHttp, QTemporaryFile, Inhalt kann nicht gelesen werden

Verfasst: 23. Dezember 2009 20:49
von Gnoxter
Moin,

ich hole mittels QHttp eine Webseite und speicher diese mit QTemporaryFile ab. Das funktioniert auch perfekt. Wenn ich aber nun in der Funktion, die durch das done() Signal aufgerufen wird, den Inhalt in eine Variable mit readAll() lesen möchte wird nichts in die Variable. Wenn ich aber die Datei so öffne ist die Seite komplett, error() gibt 0 zurück. Ich habe sogar noch ein QFile erzeugt und mit dem die Datei geöffnet, genau das gleiche. Ich weiß nicht mehr weiter, vielleicht wisst ihr was ich falsch mache. Hier sind die betreffenden Codeauszüge.

*.h

Code: Alles auswählen

  QTemporaryFile *tmp;
  QHttp *http;
Im Konstruktor

Code: Alles auswählen

 tmp = new QTemporaryFile();
 tmp->open();
 http = new QHttp();
 connect(http, SIGNAL(done(bool)), this, SLOT(http_done()));
Aufruf von http

Code: Alles auswählen

http->setHost(qurl->host(), 80);
http->get(qurl->path(), tmp );
In der http_done Funktion

Code: Alles auswählen


   blub   = tmp->fileName();
   blub1 = tmp->readAll();

 std::cout << "in Update TMP Filename: " << blub.toStdString()<< "\n";
 std::cout << "Inhalt von tmp2 :" << blub1.toStdString()<< "\n";
 std::cout << "tmp  Error? : " << tmp->error() << "\n";

Auszug aus der Terminalausgabe
in Update TMP Filename: /tmp/qt_temp.J23338
Inhalt von tmp :
tmp Error? : 0
Viele Grüße

Gnoxter

Verfasst: 23. Dezember 2009 21:12
von upsala
Wird die Datei, nachdem sie beschrieben wurde, geschlossen?

Verfasst: 23. Dezember 2009 21:38
von Gnoxter
Gute Frage, das schließen müsste dann http->get() gemacht haben? Also ich habe ein open() vor

Code: Alles auswählen

   blub   = tmp->fileName();
   blub1 = tmp->readAll(); 
ergänzt. Das Resultat bleibt das gleiche.

Viele Grüße

Gnoxter

Verfasst: 7. Januar 2010 23:05
von Gnoxter
Ich muss das hier wohl oder übel, noch mal hoch schieben. Ich hab über die Feiertage nochmal versucht das Problem zu lösen, habe es aber nicht nicht geschafft. Vielleicht hat irgend jemand ja noch eine Idee.

Viele Grüße

Gnoxter

Verfasst: 7. Januar 2010 23:14
von Christian81
Und was sagt QIODevice::pos() ?

Verfasst: 7. Januar 2010 23:33
von Gnoxter

Code: Alles auswählen

Signal http_done!
in Update TMP Filename: /tmp/qt_temp.J19932
Inhalt von tmp :
Tmp Error? : 0
Tmp Pos? : 6916
Wenn ich das richtig verstehe ist der Filedeskriptor also offen und befindet sich am Ende der Datei?

Viele Grüße

Gnoxter

Verfasst: 7. Januar 2010 23:35
von Christian81
Wäre ja auch komisch wenn er am Anfang stehen würde, oder?

Verfasst: 7. Januar 2010 23:39
von Gnoxter
Christian81 hat geschrieben:Wäre ja auch komisch wenn er am Anfang stehen würde, oder?
Ich wollte nur sicher gehen das ich den Rückgabewert richtig verstanden habe. Wenn augenscheinlich alles in Ordnung ist warum wir mit readAll(); nichts in die Variable geschrieben?

Viele Grüße


Gnoxter

Verfasst: 8. Januar 2010 08:50
von AuE
Wenn dir das File via less anschaust steht was drin?

Verfasst: 8. Januar 2010 09:46
von Christian81
Ok nochmal - wenn der FilePointer auf dem Ende der Datei steht - wa soll readAll() dann lesen???

Verfasst: 8. Januar 2010 14:05
von Gnoxter
Nunja als ich das in meinem Buch gelesen haben (Jürgen Wolf, QT4), hatte ich das so verstanden das er dann die komplette Datei ausliest. Mit einem .seek(0) funktioniert es nun.

Viele Dank fürs in-die-richtig-Richtung-schubsen und ein schönes Wochenende!

Gnoxter