Daten schreiben fertig?
-
madRenEGadE
- Beiträge: 52
- Registriert: 10. Februar 2006 15:15
Daten schreiben fertig?
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?
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?
-
Emperor_L0ser
- Beiträge: 51
- Registriert: 28. Juli 2005 12:26
- Kontaktdaten:
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
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
-
madRenEGadE
- Beiträge: 52
- Registriert: 10. Februar 2006 15:15
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
madRenEGadE
- Beiträge: 52
- Registriert: 10. Februar 2006 15:15
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?
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?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Und warum muss die Datei dann erst gespeichert werden?
Eventuell ist dein QHttp-request einfach noch nicht fertig - siehe signal requestFinish()
Eventuell ist dein QHttp-request einfach noch nicht fertig - siehe signal requestFinish()
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
madRenEGadE
- Beiträge: 52
- Registriert: 10. Februar 2006 15:15
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
madRenEGadE
- Beiträge: 52
- Registriert: 10. Februar 2006 15:15
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
readresult() wird ausgeführt BEVOR die daten eingelesen wurden!!!
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
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Ich kapiere es einfach nicht...madRenEGadE hat geschrieben: readresult() wird ausgeführt BEVOR die daten eingelesen wurden!!!
Warum kannst Du mit der ganzen Leserei nicht einfach auf requestFinsh() warten?
Und warum benuttz Du als QIODevice nicht einfach QBuffer anstatt QFile?
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
-
madRenEGadE
- Beiträge: 52
- Registriert: 10. Februar 2006 15:15