2016-06-27 25 views
0

Ich verwende ein Package mit dem folgenden Code geöffnetWarum schließt das Paket den zugrunde liegenden Stream nicht?

Package package = Package.Open(stream, fileMode, fileAccess); 

wo stream ist im Grunde ein MemoryStream. Jetzt, wenn ich package.Close() rufe, ist der Speicherstrom noch offen.

Wenn ich die überladene Methode für öffnen, wo ich einen Pfad zu einer Datei eingeben und das Paket schließen, wird die Datei Handle entsorgt. Wenn ich eine StreamReader öffne und sie schließe, wird der zugrunde liegende Stream aufgelöst.

Warum enthält die Klasse Package den zugrunde liegenden Stream nicht?

+0

schließen und entsorgen. Wenn Sie sagen, dass noch offen ist, meinen Sie, dass 'CanRead' /' CanSeek'/'CanWrite' Eigenschaften immer noch wahr sind oder auf die Sie noch zugreifen können der 'MemoryStream' Puffer? –

+0

@FedericoDipuma Ich habe eine spezielle Klasse mit Speicher-Stream als Basis-Klasse, wo ich im Grunde warten auf den Stream zu schließen und dann etwas Arbeit (schreiben Sie es zurück in das Dateisystem). Dies passiert nicht, wenn der Stream nie geschlossen wird. – Yggdrasil

Antwort

0

Sie haben einen Stream erstellt - Sie haben ihn geöffnet, Sie haben etwas erstellt, das den Stream verwenden kann. Der Stream ist jedoch immer noch da. Also ja, Sie müssen den Stream nach

+0

Um fair zu sein: Mehrere Klassen, die Streams verwenden, schließen den Stream standardmäßig, z. B. Leser und Schreiber, und Sie müssen manchmal seltsame Vorsichtsmaßnahmen treffen, wenn Sie den Stream behalten möchten, nachdem Sie mit dem Schreiber fertig sind. –

+0

Dasselbe gilt für 'StreamReader' oder einen anderen Wrapper, der nur den Stream verwendet. Aber sie schließen den Strom. – Yggdrasil

+0

true, aber als Ganzes klingt es wie es nicht zu schließen ... so – BugFinder