Zugriff auf Datei erst wenn sie fertig geschrieben ist

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

Hallo zusammen,

ich schreibe Daten in eine Datei, die ich mit einem anderen Programm auslesen möchten. Ich möchte diese Datei aber erst lesen, wenn das Schreiben beendet ist. Kann ich irgendwie feststellen, dass eine Datei "fertig" ist? Zum Beispiel, dass sie nicht mehr von einem anderen Prg geöffnet ist?

Ich benutze Python 2.6.

CU,
API
Benutzeravatar
Dobi
User
Beiträge: 31
Registriert: Mittwoch 28. September 2011, 17:04

Ein "fieser Hack" wäre, zu versuchen, die Datei mit exklusiven Schreibrechten zu öffnen. Wenn das nicht geht, rutscht noch irgendwer anders drauf herum.
Die wesentliche elegantere Lösung ist jedoch, die Datei erstmal unter einem anderen Namen (oder in ein anderes Verzeichnis auf der gleichen Partition) zu schreiben und dann zum eigentliche Zielnamen umzubenennen. Umbenennen ist nämlich unter den meistens OSs eine atomare Operation.
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

Hi Dobi,

ok, so nen exklusiver Schreibversuch wäre ne Möglichkeit - aber warum ist das nen "fieser" Hack?

Wenn ich das mit dem Kopieren/Umbenennen mache, dann gehen mir aber evtl Daten verloren, wenn in der Zwischenzeit noch der letzte Satz geschrieben würde und dann das Umbenennen klappt?
Benutzeravatar
Dobi
User
Beiträge: 31
Registriert: Mittwoch 28. September 2011, 17:04

Nicht die lesende sondern die schreibende Anwendung soll umbenennen wenn sie fertig ist. Damit bist du auf der Sicheren Seite.

Das andere (der Hack) ist fies, weil es ja sein kann, dass ein schreibendes Programm zwischendurch die Datei schliesst und dann hinterher noch was dranhängt. Wenn du Pech hast, versuchts dein lesendes Programm genau in dieser Lücke und rupft dem anderen die Datei unterm Hintern weg. Je nach Betriebs- oder Dateisystem (besonders Remote-Kram) kanns eventuell passieren, dass der Öffnungsversuch vom Leser klappt obwohl der Schreiber noch nicht fertig ist, und schon wieder hast du den Salat.

Code: Alles auswählen

Leser schreibt gemütlich nach nach bla.txt.temp
Leser benennt bla.txt.temp nach bla.txt um (atomar, also toll weil keine race conditions)
Schreiber liest bla.txt
ist im Normalfall besser. :)
api
User
Beiträge: 181
Registriert: Donnerstag 7. August 2008, 21:23

Ja natürlich, wenn die schreibende Anwendung das mit dem Umbenennen macht, ist es klar.. :D

Und mit dem anderen Versuch "Hack" dürfte das Problem dann nicht wirklich unwahrscheinlich sein...

Danke. Damit hast du mir weitergeholfen... :D
Antworten