QFile close() schließt Datei nicht korrekt

Alles rund um die Programmierung mit Qt
Antworten
mim1711
Beiträge: 4
Registriert: 8. August 2007 12:47

QFile close() schließt Datei nicht korrekt

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

Beitrag von Christian81 »

Glaube ich nicht - funktioniert bei mir prima. Ein Testcase bitte.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
mim1711
Beiträge: 4
Registriert: 8. August 2007 12:47

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

Beitrag 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...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
mim1711
Beiträge: 4
Registriert: 8. August 2007 12:47

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

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten