Wiederöffnen eines streams

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
bowie_22
User
Beiträge: 7
Registriert: Mittwoch 28. Oktober 2009, 07:14

Hallo Zusammen,


ich habe eine Klasse die immer mal wieder eine Datei öffnen muss, um Stück für Stück bestimmte Inhalte auszulesen.

Meine aktuelle Implementierung hat ein Attribut self.file_stream.
Dieses Attribut wird, wenn der Anwender bestimmte Methoden der Klasse aufruft um Inhalte aus der Datei zu lesen.

Mein Problem:
Aktuell bedeutet dies, dass ich die Datei immer offen habe.
Ich wollte eigentlich nach jedem Lesevorgang die Datei, den Stream wieder öffnen und danach schliessen.
Daher Frage ich mich ob man self.file_stream wieder öffnen kann, ohne io.open(file_path,'rb) zu verwenden.
Also folgender MAßen:

Das steht im Konstruktor der Klasse, hier werden quasi die grundlegenden Inhalte aus dem Stream gelesen und dann wieder geschlossen:

Code: Alles auswählen

 with io.open(mdf_file,'rb') as self.mdfstream:
            self.IDBLOCK_START_BYTE_POS=STARTPOSIDBLOCK
            self.HDBLOCK_START_BYTE_POS=STARTPOSHDBLOCK
            self.IDBLOCK=self.__read_IDBLOCK(self.IDBLOCK_START_BYTE_POS)
            self.HDBLOCK=self.__read_HDBLOCK(self.HDBLOCK_START_BYTE_POS)
            self.DGBLOCKS=self.__read_DGBLOCK(self.HDBLOCK.pointer_2_first_DGBLOCK)
In einer Methode read die aufgerufen werden kann werden dann nur ganz bestimmte Inhalte ausgelesen:

Code: Alles auswählen

...
if self.mdfstream.closed=True:
     REOPEN STREAM --> geht das
cc_block=self.__read_CCBLOCK(cn_block.pointer_2_conversion_formular)
...
Oder ist die einzige alternative sich den Pfad der Datei zu merken und den stream über io.open(path,'rb') zu öffnen?

Gruß

Marcus
deets

Du kannst entweder neu oeffnen + seek machen, oder einfach offenhalten. Was spricht gegen letzteres?
Antworten