Freigeben über


System.IO.FileStream-Klasse

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

Verwenden Sie die FileStream Klasse zum Lesen, Schreiben in, Öffnen und Schließen von Dateien in einem Dateisystem und zum Bearbeiten anderer dateibezogener Betriebssystemhandles, einschließlich Rohren, Standardeingaben und Standardausgabe. Sie können die Readsynchronen WriteCopyToFlush Vorgänge oder ReadAsyncdie , WriteAsyncCopyToAsyncund FlushAsync Methoden verwenden, um asynchrone Vorgänge auszuführen. Verwenden Sie die asynchronen Methoden, um ressourcenintensive Dateivorgänge auszuführen, ohne den Standard Thread zu blockieren. Diese Überlegungen zur Leistung sind insbesondere in einer Windows 8.x Store-App oder Desktop-App wichtig, bei der ein zeitaufwendiger Streamingvorgang den UI-Thread blockieren kann und es dann den Anschein hat, dass Ihre App nicht funktioniert. FileStream puffert Eingaben und Ausgaben, um eine bessere Leistung zu erzielen.

Wichtig

Dieser Typ implementiert die IDisposable-Schnittstelle. Nach Abschluss der Verwendung sollten Sie den Typ entweder direkt oder indirekt löschen. Zum direkten Löschen des Typs rufen Sie seine Dispose-Methode in einem try/catch-Block auf. Zum indirekten Löschen verwenden Sie ein Sprachkonstrukt wie using (in C#) oder Using (in Visual Basic). Weitere Informationen finden Sie im Abschnitt „Verwenden eines Objekts, das IDisposable implementiert“ des Themas „Die IDisposable-Schnittstelle“.

Die IsAsync Eigenschaft erkennt, ob das Dateihandle asynchron geöffnet wurde. Sie geben diesen Wert an, wenn Sie eine Instanz der Klasse mithilfe eines Konstruktors erstellen, der FileStream über einen isAsync, useAsyncoder options parameter verfügt. Wenn die Eigenschaft lautet true, verwendet der Datenstrom überlappende E/A, um Dateivorgänge asynchron auszuführen. IsAsync Die Eigenschaft muss true jedoch nicht die ReadAsync, WriteAsyncoder CopyToAsync Die Methode aufrufen. Wenn die IsAsync Eigenschaft ist false und Sie die asynchronen Lese- und Schreibvorgänge aufrufen, wird der UI-Thread immer noch nicht blockiert, aber der tatsächliche E/A-Vorgang wird synchron ausgeführt.

Die Seek Methode unterstützt den zufälligen Zugriff auf Dateien. Seek ermöglicht das Verschieben der Lese-/Schreibposition an eine beliebige Position innerhalb der Datei. Dies erfolgt mit Byte-Offset-Referenzpunktparametern. Der Byteoffset ist relativ zum Suchbezugspunkt, der den Anfang, die aktuelle Position oder das Ende der zugrunde liegenden Datei sein kann, wie durch die drei Member der SeekOrigin Enumeration dargestellt.

Hinweis

Datenträgerdateien unterstützen immer den zufälligen Zugriff. Zum Zeitpunkt der Konstruktion wird der CanSeek Eigenschaftswert auf true oder false abhängig vom zugrunde liegenden Dateityp festgelegt. Wenn der zugrunde liegende Dateityp FILE_TYPE_DISK ist, wie in winbase.h definiert, lautet trueder CanSeek Eigenschaftswert . Andernfalls lautet falseder CanSeek Eigenschaftswert .

Wenn ein Prozess mit einem Teil einer Gesperrten Datei beendet oder eine Datei mit ausstehenden Sperren schließt, ist das Verhalten nicht definiert.

Informationen zu Verzeichnisvorgängen und anderen Dateivorgängen finden Sie unter " File, Directory" und Path "Klassen". Die File Klasse ist eine Hilfsklasse mit statischen Methoden für die Erstellung von FileStream Objekten basierend auf Dateipfaden. Die MemoryStream Klasse erstellt einen Datenstrom aus einem Bytearray und ähnelt der FileStream Klasse.

Eine Liste allgemeiner Datei- und Verzeichnisvorgänge finden Sie unter "Allgemeine E/A-Aufgaben".

Erkennung von Datenstrompositionsänderungen

Wenn ein FileStream Objekt keinen exklusiven Haltepunkt für das Handle besitzt, kann ein anderer Thread gleichzeitig auf das Dateihandle zugreifen und die Position des Dateizeigers des Betriebssystems ändern, der dem Dateihandle zugeordnet ist. In diesem Fall kann die zwischengespeicherte Position im FileStream Objekt und die zwischengespeicherten Daten im Puffer kompromittiert werden. Das FileStream Objekt führt routinemäßig Überprüfungen von Methoden durch, die auf den zwischengespeicherten Puffer zugreifen, um sicherzustellen, dass die Handleposition des Betriebssystems mit der vom Objekt verwendeten FileStream zwischengespeicherten Position übereinstimmt.

Wenn in einem Aufruf der Read Methode eine unerwartete Änderung der Handleposition erkannt wird, wird der Inhalt des Puffers von .NET dis Karte und der Datenstrom erneut aus der Datei gelesen. Dies kann sich auf die Leistung auswirken, abhängig von der Größe der Datei und anderen Prozessen, die sich auf die Position des Dateidatenstroms auswirken könnten.

Wenn in einem Aufruf der Write Methode eine unerwartete Änderung der Ziehpunktposition erkannt wird, wird der Inhalt des Puffers aufgehoben Karte und eine IOException Ausnahme ausgelöst.

Ein FileStream Objekt hat keinen exklusiven Haltepunkt für das Handle, wenn entweder auf die SafeFileHandle Eigenschaft zugegriffen wird, um das Handle verfügbar zu machen, oder das FileStream Objekt erhält die SafeFileHandle Eigenschaft im Konstruktor.