Teilen über


Datei- und Stream-Ein-/Ausgabe

Datei- und Datenstrom-E/A (Eingabe/Ausgabe) bezieht sich auf die Übertragung von Daten an oder von einem Speichermedium. In .NET enthalten die System.IO Namespaces Typen, die das Lesen und Schreiben sowohl synchron als auch asynchron in Datenströmen und Dateien ermöglichen. Diese Namespaces enthalten auch Typen, die Komprimierung und Dekomprimierung für Dateien ausführen, und Typen, die die Kommunikation über Rohre und serielle Ports ermöglichen.

Eine Datei ist eine sortierte und benannte Sammlung von Bytes, die beständigen Speicher aufweisen. Wenn Sie mit Dateien arbeiten, arbeiten Sie mit Verzeichnispfaden, Datenträgerspeicher und Datei- und Verzeichnisnamen. Im Gegensatz dazu ist ein Datenstrom eine Abfolge von Bytes, die Sie verwenden können, um aus einem Sicherungsspeicher zu lesen und in einen Sicherungsspeicher zu schreiben, bei dem es sich um eins von mehreren Speichermedien (z. B. Datenträger oder Arbeitsspeicher) handelt. Genau so wie es mehrere Speicherungsorte gibt, die keine Datenträger sind, gibt es verschiedene Arten von Datenströmen, die keine Dateistreams sind, wie z. B. Netzwerk-, Speicher- und Pipestreams.

Dateien und Verzeichnisse

Sie können die Typen im System.IO Namespace verwenden, um mit Dateien und Verzeichnissen zu interagieren. Sie können z. B. Eigenschaften für Dateien und Verzeichnisse abrufen und festlegen sowie Sammlungen von Dateien und Verzeichnissen basierend auf Suchkriterien abrufen.

Informationen zu Pfadbenennungskonventionen und den Methoden zum Ausdrücken eines Dateipfads für Windows-Systeme, einschließlich der doS-Gerätesyntax, die in .NET Core 1.1 und höher und .NET Framework 4.6.2 und höher unterstützt wird, finden Sie unter "Dateiformate" auf Windows-Systemen.

Nachfolgend sind einige häufig verwendete Datei- und Verzeichnisklassen aufgeführt:

  • File – stellt statische Methoden zum Erstellen, Kopieren, Löschen, Verschieben und Öffnen von Dateien bereit und hilft beim Erstellen eines FileStream Objekts.

  • FileInfo – stellt Instanzmethoden zum Erstellen, Kopieren, Löschen, Verschieben und Öffnen von Dateien bereit und hilft beim Erstellen eines FileStream Objekts.

  • Directory – stellt statische Methoden zum Erstellen, Verschieben und Aufzählen durch Verzeichnisse und Unterverzeichnisse bereit.

  • DirectoryInfo - stellt Instanzmethoden zum Erstellen, Verschieben und Aufzählen durch Verzeichnisse und Unterverzeichnisse bereit.

  • Path - stellt Methoden und Eigenschaften für die Verarbeitung von Verzeichniszeichenfolgen plattformübergreifend bereit.

Sie sollten beim Aufrufen von Dateisystemmethoden immer eine robuste Ausnahmebehandlung bereitstellen. Weitere Informationen finden Sie unter Behandeln von E/A-Fehlern.

Zusätzlich zur Verwendung dieser Klassen können Visual Basic-Benutzer die Von der Microsoft.VisualBasic.FileIO.FileSystem Klasse für Datei-E/A bereitgestellten Methoden und Eigenschaften verwenden.

Informationen finden Sie unter Anleitung: Verzeichnisse kopieren, Anleitung: Verzeichnisliste erstellen und Anleitung: Verzeichnisse und Dateien auflisten.

Bäche

Die abstrakte Basisklasse Stream unterstützt das Lesen und Schreiben von Bytes. Alle Klassen, die Datenströme darstellen, erben von der Stream Klasse. Die Stream Klasse und die abgeleiteten Klassen bieten eine einheitliche Ansicht von Datenquellen und Repositories und isolieren den Programmierer von den spezifischen Details des Betriebssystems und der zugrunde liegenden Geräte.

Datenströme umfassen drei grundlegende Vorgänge:

  • Lesen – Übertragen von Daten aus einem Datenstrom in eine Datenstruktur, z. B. ein Bytearray.

  • Schreiben – Übertragen von Daten in einen Datenstrom aus einer Datenquelle.

  • Suchen – Abfragen und Ändern der aktuellen Position innerhalb eines Datenstroms.

Je nach zugrunde liegender Datenquelle oder Repository unterstützt ein Datenstrom möglicherweise nur einige dieser Funktionen. Beispielsweise unterstützt die PipeStream Klasse das Suchen nicht. Die CanRead, CanWrite und CanSeek Eigenschaften eines Datenstroms geben die Vorgänge an, die der Datenstrom unterstützt.

Nachfolgend sind einige häufig verwendete Streamklassen aufgeführt:

  • FileStream – zum Lesen und Schreiben in eine Datei.

  • IsolatedStorageFileStream – zum Lesen und Schreiben in eine Datei im isolierten Speicher.

  • MemoryStream – Lesen und Schreiben im Arbeitsspeicher als Sicherungsspeicher.

  • BufferedStream – zur Verbesserung der Leistung von Lese- und Schreibvorgängen.

  • NetworkStream – zum Lesen und Schreiben über Netzwerksockets.

  • PipeStream – Lesen und Schreiben über anonyme und benannte Pipes.

  • CryptoStream – zum Verknüpfen von Datenströmen mit kryptografischen Transformationen.

Ein Beispiel für das asynchrone Arbeiten mit Datenströmen finden Sie unter Asynchrone Datei-E/A.

Leser und Autoren

Der System.IO Namespace stellt außerdem Typen zum Lesen codierter Zeichen aus Datenströmen bereit und schreibt sie in Datenströme. Datenströme sind in der Regel für Byteeingaben und -ausgaben ausgelegt. Die Reader- und Writer-Typen übernehmen die Konvertierung der codierten Zeichen in Bytes und umgekehrt, sodass der Vorgang im Stream abgeschlossen werden kann. Jede Lese- und Writer-Klasse ist einem Datenstrom zugeordnet, der über die Eigenschaft der Klasse BaseStream abgerufen werden kann.

Im Folgenden sind einige häufig verwendete Lese- und Schreibklassen aufgeführt:

  • BinaryReader und BinaryWriter – zum Lesen und Schreiben von primitiven Datentypen als Binärwerte.

  • StreamReader und StreamWriter – zum Lesen und Schreiben von Zeichen mithilfe eines Codierungswerts, um die Zeichen in und aus Bytes zu konvertieren.

  • StringReader und StringWriter -– Lesen und Schreiben von Zeichen in und aus Zeichenfolgen.

  • TextReader und TextWriter – dienen als abstrakte Basisklassen für andere Leser und Autoren, die Zeichen und Zeichenfolgen lesen und schreiben, jedoch keine Binärdaten.

Weitere Informationen finden Sie unter Wie man: Text aus einer Datei liest, Wie man: Text in eine Datei schreibt, Wie man: Zeichen aus einer Zeichenkette liest, und Wie man: Zeichen in eine Zeichenkette schreibt.

Asynchrone E/A-Vorgänge

Das Lesen oder Schreiben einer großen Datenmenge kann ressourcenintensiv sein. Sie sollten diese Aufgaben asynchron ausführen, wenn Ihre Anwendung für den Benutzer reaktionsfähig bleiben muss. Bei synchronen E/A-Vorgängen wird der UI-Thread blockiert, bis der ressourcenintensive Vorgang abgeschlossen ist. Verwenden Sie asynchrone E/A-Vorgänge beim Entwickeln von Windows 8.x Store-Apps, um zu verhindern, dass die App nicht mehr funktioniert.

Die asynchronen Member enthalten Async in ihren Namen, z. B. die CopyToAsync, FlushAsync, ReadAsync und WriteAsync Methoden. Sie verwenden diese Methoden mit den async Und await Schlüsselwörtern.

Weitere Informationen finden Sie unter Asynchrones Datei-I/O.

Komprimierung

Die Komprimierung bezieht sich auf den Prozess der Verringerung der Größe einer Datei für den Speicher. Dekompression ist der Prozess des Extrahierens des Inhalts einer komprimierten Datei, sodass sie in einem verwendbaren Format vorliegen. Der System.IO.Compression Namespace enthält Typen zum Komprimieren und Dekomprimieren von Dateien und Datenströmen.

Die folgenden Klassen werden häufig beim Komprimieren und Dekomprimieren von Dateien und Datenströmen verwendet:

  • ZipArchive – zum Erstellen und Abrufen von Einträgen im ZIP-Archiv.

  • ZipArchiveEntry – für die Darstellung einer komprimierten Datei.

  • ZipFile – zum Erstellen, Extrahieren und Öffnen eines komprimierten Pakets.

  • ZipFileExtensions – zum Erstellen und Extrahieren von Einträgen in einem komprimierten Paket.

  • DeflateStream – zum Komprimieren und Dekomprimieren von Datenströmen mithilfe des Deflate-Algorithmus.

  • GZipStream – zum Komprimieren und Dekomprimieren von Datenströmen im Gzip-Datenformat.

Siehe Vorgehensweise: Komprimieren und Extrahieren von Dateien.

Isolierter Speicher

Isolierter Speicher ist ein Datenspeichermechanismus, der Isolation und Sicherheit bietet, indem standardisierte Methoden zum Zuordnen von Code zu gespeicherten Daten definiert werden. Der Speicher stellt ein virtuelles Dateisystem bereit, das von Benutzer, Assembly und (optional) Domäne isoliert ist. Isolierter Speicher ist besonders nützlich, wenn Ihre Anwendung nicht über die Berechtigung zum Zugriff auf Benutzerdateien verfügt. Sie können Einstellungen oder Dateien für Ihre Anwendung auf eine Weise speichern, die von der Sicherheitsrichtlinie des Computers gesteuert wird.

Isolierter Speicher ist für Windows 8.x Store-Apps nicht verfügbar; Verwenden Sie stattdessen Anwendungsdatenklassen im Windows.Storage Namespace. Weitere Informationen finden Sie unter Anwendungsdaten.

Die folgenden Klassen werden häufig bei der Implementierung von isolierten Speicher verwendet:

  • IsolatedStorage – stellt die Basisklasse für isolierte Speicherimplementierungen bereit.

  • IsolatedStorageFile – stellt einen isolierten Speicherbereich bereit, der Dateien und Verzeichnisse enthält.

  • IsolatedStorageFileStream – macht eine Datei innerhalb des isolierten Speichers verfügbar.

Siehe isolierter Speicher.

E/A-Vorgänge in Windows Store-Apps

Die .NET für Windows 8.x Store-Apps enthalten viele der Typen zum Lesen und Schreiben in Streams. Jedoch sind nicht alle E/A-Typen von .NET verfügbar.

Einige wichtige Unterschiede bei der Verwendung von E/A-Vorgängen in Windows 8.x Store-Apps:

Sie können bei Bedarf zwischen .NET Framework-Streams und Windows-Runtime-Streams konvertieren. Weitere Informationen finden Sie unter Vorgehensweise: Konvertieren zwischen .NET Framework-Streams und Windows-Runtime-Streams oder unter WindowsRuntimeStreamExtensions.

Weitere Informationen zu E/A-Vorgängen in einer Windows 8.x Store-App finden Sie in der Schnellstartanleitung: Lesen und Schreiben von Dateien.

E/A und Sicherheit

Wenn Sie die Klassen im Namespace verwenden, müssen Sie die Sicherheitsanforderungen des System.IO Betriebssystems wie Zugriffssteuerungslisten (ACCESS Control Lists, ACLs) befolgen, um den Zugriff auf Dateien und Verzeichnisse zu steuern. Diese Anforderung ist zusätzlich zu allen FileIOPermission Anforderungen erforderlich. Sie können ACLs programmgesteuert verwalten. Weitere Informationen finden Sie unter How to: Add or Remove Access Control List Entries.

Standardsicherheitsrichtlinien verhindern, dass Internet- oder Intranetanwendungen auf Dateien auf dem Computer des Benutzers zugreifen. Verwenden Sie daher nicht die E/A-Klassen, die einen Pfad zu einer physischen Datei benötigen, wenn Sie Code schreiben, der über das Internet oder Intranet heruntergeladen wird. Verwenden Sie stattdessen isolierten Speicher für .NET-Anwendungen.

Eine Sicherheitsüberprüfung wird nur ausgeführt, wenn der Datenstrom erstellt wird. Öffnen Sie daher keinen Datenstrom und übergeben Sie ihn nicht an weniger vertrauenswürdige Code- oder Anwendungsbereiche.

  • Allgemeine E/A-Vorgänge
    Stellt eine Liste der E/A-Aufgaben bereit, die Dateien, Verzeichnissen und Datenströmen zugeordnet sind, sowie Links zu relevanten Inhalten und Beispielen für jede Aufgabe.

  • Asynchrone Datei-Ein-/Ausgabe
    Beschreibt die Leistungsvorteile und den grundlegenden Betrieb asynchroner E/A-Vorgänge.

  • Isolierter Speicher
    Beschreibt einen Datenspeichermechanismus, der Isolation und Sicherheit bietet, indem standardisierte Methoden zum Zuordnen von Code zu gespeicherten Daten definiert werden.

  • Rohre
    Beschreibt anonyme und benannte Pipevorgänge in .NET.

  • Speicherabbilddateien
    Beschreibt speicherabbildete Dateien, die den Inhalt von Dateien auf der Festplatte im virtuellen Speicher enthalten. Sie können speicherzuordnungsfähige Dateien verwenden, um sehr große Dateien zu bearbeiten und gemeinsam genutzten Speicher für die Interprozesskommunikation zu erstellen.