Seite 1 von 1
QFile close() schließt Datei nicht korrekt
Verfasst: 8. August 2007 12:54
von mim1711
Ich habe gerade festgestellt, dass die close() Methode von QFile die betreffende Datei nicht korrekt schließt. Nach dem close() kann ich von einem anderen Programm nicht mehr auf die Datei zugreifen. Mache ich das Ganze mit fopen() etc. zu Fuß läuft alles prima. Hat das schon mal jemand gehabt bzw. eine Idee was da falsch läuft?
Verfasst: 8. August 2007 13:24
von Christian81
Glaube ich nicht - funktioniert bei mir prima. Ein Testcase bitte.
Verfasst: 8. August 2007 13:31
von mim1711
So sieht der Code aus:
QString fn = QFileDialog::getOpenFileName(this, QString::null,String::null);
QFile file(fn);
if (file.open(QFile::ReadOnly | QFile::Text))
{
ui.nullpunktEdit->setPlainText(file.readAll());
file.close();
}
ui.nullpunktEdit ist ein QTextEdit.
Das Qt Programm läuft danach weiter. Eine zweite Anwendung versucht dann die Datei für sich zu öffnen und scheitert.
Wie gesagt, zu Fuß ist alles OK
Verfasst: 8. August 2007 13:42
von Christian81
Kann es (Qt4.2.1/4.3.0) unter win32 nicht bestätigen und wüsste auch nicht warum - Du öffnest nur mit ReadOnly - also können andere Apps auch per ReadOnly zur gleichen Zeit die Datei öffnen...
Verfasst: 8. August 2007 20:43
von mim1711
Mein Anwendung läuft noch unter Qt 4.1.0 (VS2005)
Habe mal in den Sourcen nachgeschaut was dort beim Öffnen einer Datei gemacht wird.
In der Version Qt 4.1.0 wird die (eigentlich) neue Funktion ws_open_s() verwendet. In der Version 4.3.0 wird die "alte" Win32 Funktion CreateFileW() verwendet. In ws_open_s() werden implizit sinnvolle (aus MS Sicht) Security Attribute gesetzt und in CreateFileW() werden die beliebten Null Security Attribute übergeben.
Anscheinend hat die Anwendung, die bei mir meckert Probleme damit. Vielleicht gab's dass schon öfter und Trolltech hat es deshalb wieder geändert
Verfasst: 8. August 2007 21:22
von Christian81
CreateFileW ist die Funktion die man verwenden sollte - alles andere ist nur Zusatz das irgendwie reingebastelt wurde damit es zumindest etwas nach Posix aussieht.