Seite 1 von 1

Wiederöffnen eines streams

Verfasst: Mittwoch 22. Februar 2012, 05:19
von bowie_22
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

Re: Wiederöffnen eines streams

Verfasst: Mittwoch 22. Februar 2012, 08:22
von deets
Du kannst entweder neu oeffnen + seek machen, oder einfach offenhalten. Was spricht gegen letzteres?