QHttp, QTemporaryFile, Inhalt kann nicht gelesen werden

Alles rund um die Programmierung mit Qt
Antworten
Gnoxter
Beiträge: 6
Registriert: 7. Dezember 2009 11:10

QHttp, QTemporaryFile, Inhalt kann nicht gelesen werden

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Wird die Datei, nachdem sie beschrieben wurde, geschlossen?
Gnoxter
Beiträge: 6
Registriert: 7. Dezember 2009 11:10

Beitrag 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
Gnoxter
Beiträge: 6
Registriert: 7. Dezember 2009 11:10

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

Beitrag von Christian81 »

Und was sagt QIODevice::pos() ?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Gnoxter
Beiträge: 6
Registriert: 7. Dezember 2009 11:10

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

Beitrag von Christian81 »

Wäre ja auch komisch wenn er am Anfang stehen würde, oder?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Gnoxter
Beiträge: 6
Registriert: 7. Dezember 2009 11:10

Beitrag 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
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Wenn dir das File via less anschaust steht was drin?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ok nochmal - wenn der FilePointer auf dem Ende der Datei steht - wa soll readAll() dann lesen???
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Gnoxter
Beiträge: 6
Registriert: 7. Dezember 2009 11:10

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