Seite 1 von 1
Daten schreiben fertig?
Verfasst: 11. Februar 2006 14:14
von madRenEGadE
Habe folgendes Problem:
Bei meinem Programm gibt es eine Loginfunktion...
Wenn man auf den Button klickt wird eine Datei erstellt und auf ihren Inhalt überprüft. Kann es sein das die Funktionen zum Scrheiben einer Datei asynchron sind? Es kommt nämlich immer vor das ich mehrmals auf den Button klicken muss, da anscheinend die Datei bereits ausgelesen wird, wenn sie noch nicht fertig erstellt wurde?! Gibts es für dieses Problem etwas ähnliches wie die requestFinish sache bei QHttp? oder liegt mein Problem eventuell sogar ganz wo anders?
Verfasst: 12. Februar 2006 14:25
von Emperor_L0ser
es gibt dort mehre fehlerquellen, oder möglichkeiten das es klappt
zum ersten: ja dateien werden erst auf die platte geschrieben, wenn das system grad nichts zu tun hat, dies wird aber vom betriebssystem verwaltet und nicht von qt. das beeinträchtigt das arbeiten mit dateien jedoch nicht.
ein sehr beliebter fehler ist das vergessen von close() der Datei.
2. möglichkeit dem bs unter die arme zu greifen: nach dem schreiben flush() benutzen, damit werden alle daten aus dem schreib/lesepuffer gespeichert.
mfg Emperor_L0ser
Verfasst: 12. Februar 2006 17:00
von madRenEGadE
also am close() liegt es nicht!!!
das Porblem ist das ich etwas in eine datei schreibe, diese auslese und dann auf einen bestimmten inhalt prüfe und die Überprüfung anscheinend schon VOR dem beenden des auslesens statt findet!!!
weiß absolut nicht wie ich das problem lösen soll
Verfasst: 12. Februar 2006 17:02
von Christian81
Warum schreibst Du was nur um es dann (im gleichen Programm) wieder auszulesen??
Verfasst: 12. Februar 2006 17:04
von madRenEGadE
das liegt daran das ich die datei von einem server per http downloade (also speichere) und dann sofort zum lesen öffne
PS: flush() hat nicht geholfen
und ich hab das problem auch nur wenn ich QT benutze in anderen andwendungen is sowas NIE passiert
Gibt es vielleicht die Möglickeit alles außer dem schreiben der datei in einen wartezustand zu verstetzen?
Verfasst: 12. Februar 2006 17:52
von Christian81
Und warum muss die Datei dann erst gespeichert werden?
Eventuell ist dein QHttp-request einfach noch nicht fertig - siehe signal
requestFinish()
Verfasst: 12. Februar 2006 17:53
von madRenEGadE
requestFinish is schon erledigt wenn ich die datei angucke dann steht da auch alles drin aber das programm läuft eben bereits weiter wenn und überprüft die ausgelesenen daten bevor das lesen oder schreiben fertig ist
Verfasst: 12. Februar 2006 17:58
von Christian81
Dann musst du eben warten bis requestFinish feritg ist... wo liegt das Problem?
/edit
Und ich habe immer noch nicht kapiert warum die Datei gespeichert werden muss...
Verfasst: 12. Februar 2006 18:42
von madRenEGadE
gibt es noch eine möglichkeit daten einer html datei zu lesen als diese zu speichernich warte doch bis requestFinish aba daran liegt es ja nicht...
hier mal der code damit es bissl deutlicher wird
Code: Alles auswählen
QFile f("query/login.trm");
f.open(QIODevice::ReadOnly);
QTextStream textStream (&f);
userid = textStream.readLine();
buffer = textStream.readLine();
end = textStream.readLine();
f.close();
readResult(); // überprüft die eingelesenen daten
readresult() wird ausgeführt BEVOR die daten eingelesen wurden!!!
Verfasst: 12. Februar 2006 18:52
von Christian81
madRenEGadE hat geschrieben:
readresult() wird ausgeführt BEVOR die daten eingelesen wurden!!!
Ich kapiere es einfach nicht...
Warum kannst Du mit der ganzen Leserei nicht einfach auf requestFinsh() warten?
Und warum benuttz Du als QIODevice nicht einfach QBuffer anstatt QFile?
Verfasst: 12. Februar 2006 18:55
von madRenEGadE
das Problem ist ja nich requestFinish!!!
was für einen Vorteil hat QBuffer?