Seite 1 von 1

datei schreiben...fertig?

Verfasst: Mittwoch 17. Juni 2009, 11:17
von mayx
Moin,

kurze, schmerzlose Frage:
Wie kann ich checken, ob eine Datei fertig geschrieben ist?

Code: Alles auswählen


def schreibeDatei(self, datei, message):
        self.dateifertig = False
        f = open(datei,"w")
        f.write("%s" %message)
        f.close()
        self.dateifertig = True

Vielen Dank.

Verfasst: Mittwoch 17. Juni 2009, 11:22
von EyDu
Darf man fragen, was genau du vor hast? Deine Frage hört sich reichlich seltsam an.

Du weißt doch, wann du close aufgerufen hast, dann sind die Daten auch spätestens danach geschrieben.

Verfasst: Mittwoch 17. Juni 2009, 11:22
von Dill
du meinst in deinem eigenen programm?
wenn die methode f.write() durchgelaufen ist.
(synchrone file I/O)

:?:

Verfasst: Mittwoch 17. Juni 2009, 11:28
von lunar
EyDu hat geschrieben:Du weißt doch, wann du close aufgerufen hast, dann sind die Daten auch spätestens danach geschrieben.
Streng genommen stimmt das nicht. ".close()" leert nur die internen Puffer des entsprechenden Datenstroms.

Verfasst: Mittwoch 17. Juni 2009, 11:46
von mayx
also ist die idee nach close n boolean zu setzten okay?
stimmt dann der boolean?

Danke

Verfasst: Mittwoch 17. Juni 2009, 11:52
von cofi
Was meinst du denn mit "fertig geschrieben"?
Dass sie komplett auf der Platte liegen?
Dass das OS die Daten bekommen hat und in den Puffer des Dateisystems / der Festplatte geschrieben hat?

Ersteres kann man nicht überprüfen, da das vom Dateisystem / der Festplatte abhängt, wann die geschrieben werden.
Letzteres leistet ``close``.

Verfasst: Mittwoch 17. Juni 2009, 12:01
von mayx
oh, okay, danke.

Ich denke ehr an: Wann kann|darf ich einen anderes Programm das Signal zum Lesen der Datei geben....

Verfasst: Mittwoch 17. Juni 2009, 12:08
von cofi
Nach dem ``close``, den Rest sollte das OS übernehmen.

Btw: ``f.write("%s" %message)`` ist ja eine nette Stilblüte :twisted:

Verfasst: Mittwoch 17. Juni 2009, 12:16
von mayx
hehe, ja. Da steht normalerweise noch mehr drin, hab ich für forum gecleant ;)

Sorry, aber nochmal für mich:
Wenn close durch is, sprich er dateifretig = True setzt kann ich mir sicher sein?

Verfasst: Mittwoch 17. Juni 2009, 13:48
von Leonidas
Ja, nachdem ``close()`` fertig ist, ist die Datei (auf Softwareebene zumindest) geschrieben, wie oft willst du das noch hören?

Verfasst: Mittwoch 17. Juni 2009, 16:07
von krisi12345
Also wenn ein schreibbefehl kommt und danach close() dann muss ja erst der write Befehl ausgeführt werden bevor die Datei geschlossen wird. Man könnt ja auch nach write() print "Datei wurde erstellt" oder etwas anderes verwenden.

Verfasst: Mittwoch 17. Juni 2009, 16:22
von Hyperion
krisi12345 hat geschrieben:Also wenn ein schreibbefehl kommt und danach close() dann muss ja erst der write Befehl ausgeführt werden bevor die Datei geschlossen wird. Man könnt ja auch nach write() print "Datei wurde erstellt" oder etwas anderes verwenden.
Wie im Snippet zu sehen war (und irgend wie per se logisch) wird write() natürlich vor close() aufgerufen.

Die Frage war eben, ob man dem close() so trauen kann, dass ein anderes Programm unmittelbar danach auf diese Datei zugreifen kann - ob ich da ein print mit Meldung einbaue ist davon doch unabhängig, solange die Frage nicht geklärt war! (was sie aber ja schon vor ettlichen Postings wurde). Meldungen rausgeben bringt ja nur etwas, wenn man sich auch sicher sein kann, dass diese auch verlässlich sind.

Verfasst: Mittwoch 17. Juni 2009, 17:02
von lunar
cofi hat geschrieben:Ersteres kann man nicht überprüfen, da das vom Dateisystem / der Festplatte abhängt, wann die geschrieben werden.
Man kann das System mit "os.fsync()" bzw. "os.fdatasync()" dazu zwingen, die Puffer des entsprechenden Dateideskriptors zu leeren und die Daten auf das Gerät zu schreiben.

Verfasst: Mittwoch 17. Juni 2009, 17:58
von BlackJack
Zwingen ist IMHO zu hart ausgedrückt, bzw. gilt das nur für's Leeren der lokalen Puffer. Wenn das "Gerät" über irgendein Netzwerkprotokoll eingehängt ist, kann es sein, dass die Daten beim entfernten Rechner immer noch nicht zwingend sofort auf der Platte landen. :-)

Verfasst: Donnerstag 18. Juni 2009, 06:27
von mkesper
Für ein Programm, das auf eine geschriebene Datei über das OS zugreift, ist es egal, ob die Daten bereits auf der Platte sind. Sobald das close() abgearbeitet ist, kann das andere Programm auf die aktuellen Daten zugreifen.