datei schreiben...fertig?

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
mayx
User
Beiträge: 71
Registriert: Sonntag 3. Mai 2009, 02:51

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.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

du meinst in deinem eigenen programm?
wenn die methode f.write() durchgelaufen ist.
(synchrone file I/O)

:?:
http://www.kinderpornos.info
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.
mayx
User
Beiträge: 71
Registriert: Sonntag 3. Mai 2009, 02:51

also ist die idee nach close n boolean zu setzten okay?
stimmt dann der boolean?

Danke
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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``.
mayx
User
Beiträge: 71
Registriert: Sonntag 3. Mai 2009, 02:51

oh, okay, danke.

Ich denke ehr an: Wann kann|darf ich einen anderes Programm das Signal zum Lesen der Datei geben....
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nach dem ``close``, den Rest sollte das OS übernehmen.

Btw: ``f.write("%s" %message)`` ist ja eine nette Stilblüte :twisted:
mayx
User
Beiträge: 71
Registriert: Sonntag 3. Mai 2009, 02:51

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?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja, nachdem ``close()`` fertig ist, ist die Datei (auf Softwareebene zumindest) geschrieben, wie oft willst du das noch hören?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
krisi12345
User
Beiträge: 205
Registriert: Mittwoch 4. März 2009, 16:56
Wohnort: Das schöne München
Kontaktdaten:

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.
[url=http://www.pc-tutos.de/Tutorials/Tutorials.htm]Wie verändert man Spiele oder Computer nach Wunsch? www.PC-Tutos.de[/url]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
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.
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. :-)
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

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.
Antworten