Datei bei Zugriff sperren (File-Lock)
Verfasst: 3. November 2009 11:13
Hi,
Ich schreibe gerade ein Programm, bei dem einige Dateien von verschiedenen Nutzern (auf Netzlaufwerken) bearbeitet werden können. Es muß also eine Möglichkeit her, allen anderen zu signalisieren, daß eine Datei gerade in Benutzung ist. Eigentlich super geeignet wäre das QtLockedFile Addon, nur leider wird die Datei nicht als QFile gelesen und geschrieben sondern über tinyxml.
Also bin ich erstmal den einfacheren Weg gegangen und erzeuge ein Lock-File, indem ich erstmal mit einem QFile.exists() nachschaue, ob es das schon gibt, falls ja, dann gesperrt, falls nein, wird es gesperrt. Das ist kein Problem. Die Lock-Datei wird gelöscht, wenn das Programm mit bearbeiten fertig ist, oder im Destruktor.
Nun das Problem: Wenn die Applikation unvorhergesehen beendet wird (die diplomatische Umschreibung für Absturz), dann passiert das Löschen nicht, weil ja auch der Destruktor nicht aufgerufen wird. Die Datei bleibt folglich für alle gesperrt und müßte händisch gelöscht werden. Gibt es eine Möglichkeit, das abzufangen?
Oder Alternativ, andere Lösungen (brauchen notfalls auf nur unter Windows funktionieren)?
Ich schreibe gerade ein Programm, bei dem einige Dateien von verschiedenen Nutzern (auf Netzlaufwerken) bearbeitet werden können. Es muß also eine Möglichkeit her, allen anderen zu signalisieren, daß eine Datei gerade in Benutzung ist. Eigentlich super geeignet wäre das QtLockedFile Addon, nur leider wird die Datei nicht als QFile gelesen und geschrieben sondern über tinyxml.
Also bin ich erstmal den einfacheren Weg gegangen und erzeuge ein Lock-File, indem ich erstmal mit einem QFile.exists() nachschaue, ob es das schon gibt, falls ja, dann gesperrt, falls nein, wird es gesperrt. Das ist kein Problem. Die Lock-Datei wird gelöscht, wenn das Programm mit bearbeiten fertig ist, oder im Destruktor.
Nun das Problem: Wenn die Applikation unvorhergesehen beendet wird (die diplomatische Umschreibung für Absturz), dann passiert das Löschen nicht, weil ja auch der Destruktor nicht aufgerufen wird. Die Datei bleibt folglich für alle gesperrt und müßte händisch gelöscht werden. Gibt es eine Möglichkeit, das abzufangen?
Oder Alternativ, andere Lösungen (brauchen notfalls auf nur unter Windows funktionieren)?