Grundlegende Datei-E/A
Die abstrakte Stream-Basisklasse unterstützt das Lesen und Schreiben von Bytes. Stream integriert asynchrone Unterstützung. Die Standardimplementierungen definieren synchrones Schreiben und Lesen in Bezug auf die entsprechenden asynchronen Methoden und umgekehrt.
Alle Klassen, die Streams darstellen, lassen sich auf die Stream-Klasse zurückführen. Die Stream-Klasse und die davon abgeleiteten Klassen stellen eine allgemeine Ansicht von Datenquellen und Repositorys bereit, sodass Programmierer sich nicht mit den Einzelheiten des Betriebssystems und der zugrunde liegenden Geräte befassen müssen.
Folgende grundlegende Operationen können mit Streams ausgeführt werden:
Aus Streams lassen sich Daten lesen. Bei einem Lesevorgang werden Daten von einem Stream in eine Datenstruktur übertragen, beispielsweise in ein Bytearray.
In Streams können Daten geschrieben werden. Bei einem Schreibvorgang werden Daten aus einer Datenquelle in einen Stream übertragen.
Streams können Suchvorgänge unterstützen. Bei einem Suchvorgang wird die aktuelle Position in einem Stream abgefragt und bearbeitet.
Abhängig von der zugrunde liegenden Datenquelle oder vom Repository unterstützen Streams möglicherweise nur einige dieser Funktionen. NetworkStreams unterstützen beispielsweise keine Suchvorgänge. Die Stream-Eigenschaften CanRead, CanWrite und CanSeek sowie die von Stream abgeleiteten Klassen legen die von verschiedenen Streams unterstützten Vorgänge fest.
Eine Liste allgemeiner E/A-Aufgaben finden Sie unter Allgemeine E/A-Aufgaben.
Hinweis
Benutzer von Visual Basic ziehen es möglicherweise vor, die vom My.Computer.FileSystem-Objekt für Datei-E/A bereitgestellten Methoden und Eigenschaften zu verwenden. Weitere Informationen finden Sie unter My.Computer.FileSystem-Objekt.
Für Datei-E/A verwendete Klassen
Directory stellt statische Methoden zum Erstellen, Verschieben und Auflisten von Verzeichnissen und Unterverzeichnissen zur Verfügung. Die DirectoryInfo-Klasse stellt Instanzmethoden bereit.
DirectoryInfo stellt Instanzmethoden zum Erstellen, Verschieben und Auflisten von Verzeichnissen und Unterverzeichnissen bereit. Die Directory-Klasse stellt statische Methoden zur Verfügung.
DriveInfo stellt Instanzmethoden für den Zugriff auf Informationen über ein Laufwerk bereit.
File stellt statische Methoden zum Erstellen, Kopieren, Löschen, Verschieben und Öffnen von Dateien bereit und unterstützt das Erstellen von FileStream. Die FileInfo-Klasse stellt Instanzmethoden bereit.
FileInfo stellt Instanzmethoden zum Erstellen, Kopieren, Löschen, Verschieben und Öffnen von Dateien bereit und unterstützt das Erstellen von FileStream. Die File-Klasse stellt statische Methoden zur Verfügung.
FileStream unterstützt den zufälligen Zugriff auf Dateien mithilfe der Seek-Methode. FileStream öffnet Dateien standardmäßig synchron, unterstützt aber auch asynchrone Vorgänge. File enthält statische Methoden, FileInfo Instanzmethoden.
FileSystemInfo ist die abstrakte Basisklasse für FileInfo und DirectoryInfo.
Path stellt Methoden und Eigenschaften für die plattformübergreifende Verarbeitung von Verzeichniszeichenfolgen zur Verfügung.
DeflateStream stellt Methoden und Eigenschaften zum Komprimieren und Dekomprimieren von Streams mithilfe des Deflate-Algorithmus bereit.
GZipStream stellt Methoden und Eigenschaften zum Komprimieren und Dekomprimieren von Streams bereit. Diese Klasse verwendet standardmäßig den gleichen Algorithmus wie die DeflateStream-Klasse, kann aber für die Verwendung anderer Komprimierungsformate erweitert werden.
SerialPort stellt Methoden und Eigenschaften zum Kontrollieren einer Dateiressource für den seriellen Anschluss bereit.
File, FileInfo, DriveInfo, Path, Directory, und DirectoryInfo sind versiegelte Klassen (in Microsoft Visual Basic NotInheritable). Sie können neue Instanzen dieser Klassen erstellen, sie können jedoch keine abgeleiteten Klassen besitzen.
Klassen für das Lesen und Schreiben von Streams
BinaryReader und BinaryWriter dienen dazu, codierte Zeichenfolgen und primitive Datentypen aus Streams zu lesen bzw. in sie zu schreiben.
StreamReader liest Zeichen aus Streams und konvertiert mithilfe von Encoding Zeichen in Bytes und umgekehrt. StreamReader verfügt über einen Konstruktor, der das richtige Encoding für den jeweiligen Stream ermittelt, und zwar auf Basis einer vorhandenen Encoding-spezifischen Präambel, z. B. einer Markierung für die Bytereihenfolge.
StreamWriter schreibt Zeichen in Streams und konvertiert mit Encoding Zeichen in Bytes.
StringReader liest Zeichen aus Strings. Mit StringReader können Sie Strings mit derselben API behandeln, sodass die Ausgabe entweder als Stream in beliebiger Codierung oder als String erfolgt.
StringWriter schreibt Zeichen in Strings. Mit StringWriter können Sie Strings mit derselben API behandeln, sodass die Ausgabe entweder als Stream in beliebiger Codierung oder als String erfolgt.
TextReader ist die abstrakte Basisklasse für StreamReader und StringReader. Die Implementierungen der abstrakten Stream-Klasse wurden für die Byteeingabe und -ausgabe entwickelt, die Implementierungen von TextReader hingegen für die Ausgabe von Unicode-Zeichen.
TextWriter ist die abstrakte Basisklasse für StreamWriter und StringWriter. Die Implementierungen der abstrakten Stream-Klasse wurden für die Eingabe und Ausgabe von Bytes entwickelt, die Implementierungen von TextWriter hingegen für die Eingabe von Unicode-Zeichen.
Allgemeine E/A-Streamklassen
Ein BufferedStream fügt einem anderen Stream, z. B. einem NetworkStream, Pufferung hinzu. (FileStream verfügt bereits über eine interne Pufferung, und ein MemoryStream benötigt keine Pufferung. Ein BufferedStream kann auf mehrere Streamtypen aufbauen, um die Lese- und Schreibleistung zu erhöhen. Ein Puffer ist ein für die Zwischenspeicherung von Daten reservierter Byteblock im Arbeitsspeicher, durch den die Anzahl der Aufrufe an das Betriebssystem verringert wird.
Ein CryptoStream verbindet Datenströme mit kryptografischen Transformationen. Obwohl CryptoStream von Stream abgeleitet ist, ist er kein Bestandteil des System.IO-Namespace, sondern im System.Security.Cryptography-Namespace enthalten.
Ein MemoryStream ist ein nicht gepufferter Stream, auf dessen gekapselte Daten direkt im Speicher zugegriffen werden kann. Dieser Stream verfügt über keinen Sicherungsspeicher und kann als temporärer Puffer verwendet werden.
Ein NetworkStream stellt einen Stream über eine Netzwerkverbindung dar. Obwohl NetworkStream von Stream abgeleitet ist, ist er kein Bestandteil des System.IO-Namespace, sondern im System.Net.Sockets-Namespace enthalten.
E/A und Sicherheit
Bei der Verwendung von Klassen im System.IO-Namespace müssen Sicherheitsanforderungen an das Betriebssystem wie z. B. Zugriffssteuerungslisten erfüllt sein, um den Zugriff zuzulassen. Dies gilt zusätzlich zu anderen FileIOPermission-Anforderungen.
Hinweis
ACLs können programmgesteuert verwaltet werden. Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen oder Entfernen von Zugriffssteuerungslisten-Einträgen und Übersicht über die ACL-Technologie.
Warnung
Die Standardsicherheitsrichtlinien für Internet und Intranet ermöglichen keinen Dateizugriff. Verwenden Sie deshalb nicht die normalen nicht isolierten E/A-Klassen beim Schreiben von Code, der über das Internet gedownloadet werden soll. Verwenden Sie stattdessen isolierte Speicherung.
Warnung
Beim Öffnen einer Datei oder eines Netzwerkstreams findet nur beim Erstellen des Streams eine Sicherheitsüberprüfung statt. Seien Sie deshalb vorsichtig bei der Weitergabe solcher Streams an Code oder Anwendungsdomänen, die weniger vertrauenswürdig sind.
Siehe auch
Aufgaben
Gewusst wie: Erstellen einer Verzeichnisauflistung
Gewusst wie: Lesen und Schreiben einer neu erstellten Datendatei
Gewusst wie: Öffnen und Anfügen an eine Protokolldatei
Gewusst wie: Lesen aus einer Textdatei
Gewusst wie: Schreiben von Text in eine Datei
Gewusst wie: Lesen von Zeichen aus einer Zeichenfolge
Gewusst wie: Schreiben von Zeichen in eine Zeichenfolge