Datei- und Stream-E/AFile and Stream I/O

Datei- und Stream-E/A (Eingabe/Ausgabe) bezieht sich auf die Übertragung von Daten auf ein oder von einem Speichermedium.File and stream I/O (input/output) refers to the transfer of data either to or from a storage medium. Im .NET Framework enthalten die System.IO-Namespaces Typen, die das synchrone und asynchrone Lesen und Schreiben in Datenströmen und Dateien ermöglichen.In the .NET Framework, the System.IO namespaces contain types that enable reading and writing, both synchronously and asynchronously, on data streams and files. Diese Namespaces enthalten zudem Typen für die Komprimierung und Dekomprimierung von Dateien sowie Typen für die Kommunikation über Pipes und serielle Anschlüsse.These namespaces also contain types that perform compression and decompression on files, and types that enable communication through pipes and serial ports.

Eine Datei ist eine geordnete, mit einem Namen versehene Auflistung von dauerhaft gespeicherten Bytes.A file is an ordered and named collection of bytes that has persistent storage. Beim Umgang mit Dateien arbeiten Sie mit Verzeichnispfaden, Datenträgern sowie mit Datei- und Verzeichnisnamen.When you work with files, you work with directory paths, disk storage, and file and directory names. Im Unterschied dazu, handelt es sich bei einem Stream um eine Sequenz von Bytes, die zum Lesen von und zum Schreiben in einen Sicherungsspeicher verwendet wird, für den unterschiedliche Speichermedien (z. B. Festplatten oder Arbeitsspeicher) verwendet werden können.In contrast, a stream is a sequence of bytes that you can use to read from and write to a backing store, which can be one of several storage mediums (for example, disks or memory). Ebenso wie es neben Festplatten mehrere andere Sicherungsspeicher gibt, gibt es neben Dateistreams zusätzlich Netzwerk-, Speicher- und Pipestreams.Just as there are several backing stores other than disks, there are several kinds of streams other than file streams, such as network, memory, and pipe streams.

Dateien und VerzeichnisseFiles and Directories

Sie können die Typen im System.IO-Namespace verwenden, um mit Dateien und Verzeichnissen zu interagieren.You can use the types in the System.IO namespace to interact with files and directories. Beispielsweise können Sie Eigenschaften für Dateien und Verzeichnisse abrufen und festlegen oder Auflistungen von Dateien und Verzeichnissen anhand von Suchkriterien abrufen.For example, you can get and set properties for files and directories, and retrieve collections of files and directories based on search criteria.

Im Folgenden sind einige häufig verwendete Datei- und Verzeichnisklassen aufgeführt:Here are some commonly used file and directory classes:

  • File – stellt statische Methoden zum Erstellen, Kopieren, Löschen, Verschieben und Öffnen von Dateien zur Verfügung und unterstützt das Erstellen eines FileStream-Objekts.File - provides static methods for creating, copying, deleting, moving, and opening files, and helps create a FileStream object.

  • FileInfo – stellt Instanzmethoden zum Erstellen, Kopieren, Löschen, Verschieben und Öffnen von Dateien zur Verfügung und unterstützt das Erstellen eines FileStream-Objekts.FileInfo - provides instance methods for creating, copying, deleting, moving, and opening files, and helps create a FileStream object.

  • Directory – stellt statische Methoden zum Erstellen, Verschieben und Auflisten von Verzeichnissen und Unterverzeichnissen zur Verfügung.Directory - provides static methods for creating, moving, and enumerating through directories and subdirectories.

  • DirectoryInfo – stellt Instanzmethoden zum Erstellen, Verschieben und Auflisten von Verzeichnissen und Unterverzeichnissen zur Verfügung.DirectoryInfo - provides instance methods for creating, moving, and enumerating through directories and subdirectories.

  • Path – stellt Methoden und Eigenschaften für die plattformübergreifende Verarbeitung von Verzeichniszeichenfolgen zur Verfügung.Path - provides methods and properties for processing directory strings in a cross-platform manner.

Neben der Verwendung dieser Klassen können Benutzer von Visual Basic die von der Microsoft.VisualBasic.FileIO.FileSystem-Klasse für Datei-E/A-Vorgänge bereitgestellten Methoden und Eigenschaften verwenden.In addition to using these classes, Visual Basic users can use the methods and properties provided by the Microsoft.VisualBasic.FileIO.FileSystem class for file I/O.

Weitere Informationen finden Sie unter Gewusst wie: Kopieren von Verzeichnissen, Gewusst wie: Erstellen einer Verzeichnisauflistung und Gewusst wie: Auflisten von Verzeichnissen und Dateien.See How to: Copy Directories, How to: Create a Directory Listing, and How to: Enumerate Directories and Files.

StreamsStreams

Die abstrakte Stream-Basisklasse unterstützt das Lesen und Schreiben von Bytes.The abstract base class Stream supports reading and writing bytes. Alle Klassen, die Streams darstellen, erben von der Stream-Klasse.All classes that represent streams inherit from the Stream class. 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 jeweiligen Geräte befassen müssen.The Stream class and its derived classes provide a common view of data sources and repositories, and isolate the programmer from the specific details of the operating system and underlying devices.

Streams umfassen drei grundlegende Vorgänge:Streams involve three fundamental operations:

  • Lesen – Übertragen der Daten von einem Stream in eine Datenstruktur, beispielsweise in ein Bytearray.Reading - transferring data from a stream into a data structure, such as an array of bytes.

  • Schreiben – Übertragen von Daten aus einer Datenquelle in einen Stream.Writing - transferring data to a stream from a data source.

  • Suchen – Abfragen und bearbeiten der aktuellen Position innerhalb eines Streams.Seeking - querying and modifying the current position within a stream.

Abhängig von der zugrunde liegenden Datenquelle oder vom Repository unterstützt ein Stream möglicherweise nur einige dieser Funktionen.Depending on the underlying data source or repository, a stream might support only some of these capabilities. Die PipeStream-Klasse unterstützt beispielsweise keine Suchvorgänge.For example, the PipeStream class does not support seeking. Die CanRead-, CanWrite- und CanSeek-Eigenschaften eines Stream geben die Vorgänge an, die vom Stream unterstützt werden.The CanRead, CanWrite, and CanSeek properties of a stream specify the operations that the stream supports.

Im Folgenden sind einige häufig verwendete Streamklassen aufgeführt:Here are some commonly used stream classes:

  • FileStream – Lesen und Schreiben in einer Datei.FileStream – for reading and writing to a file.

  • IsolatedStorageFileStream – Lesen und Schreiben in einer Datei im isolierten Speicher.IsolatedStorageFileStream – for reading and writing to a file in isolated storage.

  • MemoryStream – Lesen und Schreiben im Arbeitsspeicher als Sicherungsspeicher.MemoryStream – for reading and writing to memory as the backing store.

  • BufferedStream – Verbessern der Leistung von Lese- und Schreibvorgängen.BufferedStream – for improving performance of read and write operations.

  • NetworkStream – Lesen und Schreiben über Netzwerksockets.NetworkStream – for reading and writing over network sockets.

  • PipeStream – Lesen und Schreiben über anonyme und benannte Pipes.PipeStream – for reading and writing over anonymous and named pipes.

  • CryptoStream – Verknüpfen von Datenstreams mit kryptografischen Transformationen.CryptoStream – for linking data streams to cryptographic transformations.

Ein Beispiel für asynchrones Arbeiten mit Streams finden Sie unter Asynchrone Datei-E/A.For an example of working with streams asynchronously, see Asynchronous File I/O.

Reader und WriterReaders and Writers

Der System.IO-Namespace stellt zudem Typen zum Lesen und Schreiben von codierten Zeichen in Streams bereit.The System.IO namespace also provides types for reading encoded characters from streams and writing them to streams. Normalerweise werden Streams für die Eingabe und Ausgabe von Bytes verwendet.Typically, streams are designed for byte input and output. Die Reader- und Writer-Typen übernehmen die Konvertierung der codierten Zeichen in Bytes und umgekehrt, sodass der Vorgang im Stream abgeschlossen werden kann.The reader and writer types handle the conversion of the encoded characters to and from bytes so the stream can complete the operation. Jede Reader- und Writer-Klasse ist einem Stream zugeordnet, der durch die BaseStream-Eigenschaft der Klasse abgerufen werden kann.Each reader and writer class is associated with a stream, which can be retrieved through the class's BaseStream property.

Im Folgenden werden einige häufig verwendete Reader- und Writer-Klassen aufgeführt:Here are some commonly used reader and writer classes:

  • BinaryReader und BinaryWriter – Lesen und Schreiben von primitiven Datentypen als Binärwerte.BinaryReader and BinaryWriter – for reading and writing primitive data types as binary values.

  • StreamReader und StreamWriter – Lesen und Schreiben von Zeichen mithilfe eines Codierungswerts, der die Zeichen in Bytes konvertiert und umgekehrt.StreamReader and StreamWriter – for reading and writing characters by using an encoding value to convert the characters to and from bytes.

  • StringReader und StringWriter -– Lesen und Schreiben von Zeichen in und aus Zeichenfolgen.StringReader and StringWriter – for reading and writing characters to and from strings.

  • TextReader und TextWriter – abstrakte Basisklassen für andere Reader und Writer, die Zeichen und Zeichenfolgen, jedoch keine Binärdaten, lesen und schreiben.TextReader and TextWriter – serve as the abstract base classes for other readers and writers that read and write characters and strings, but not binary data.

Weitere Informationen finden Sie unter Gewusst wie: Lesen aus einer Textdatei, Gewusst wie: Schreiben von Text in eine Datei, Gewusst wie: Lesen von Zeichen aus einer Zeichenfolge, und Gewusst wie: Schreiben von Zeichen in eine Zeichenfolge.See How to: Read Text from a File, How to: Write Text to a File, How to: Read Characters from a String, and How to: Write Characters to a String.

Asynchrone E/A-VorgängeAsynchronous I/O Operations

Das Lesen oder Schreiben einer großen Datenmenge kann ressourcenintensiv sein.Reading or writing a large amount of data can be resource-intensive. Damit Ihre Anwendung weiterhin auf Benutzerinteraktionen reagiert, sollten Sie diese Aufgaben asynchron ausführen.You should perform these tasks asynchronously if your application needs to remain responsive to the user. Bei synchronen E/A-Vorgängen wird der UI-Thread blockiert, bis der ressourcenintensive Vorgang abgeschlossen ist.With synchronous I/O operations, the UI thread is blocked until the resource-intensive operation has completed. Verwenden Sie beim Entwickeln von Windows 8.x StoreWindows 8.x Store-Apps asynchrone E/A-Vorgänge, damit nicht der Eindruck erweckt wird, dass Ihre App nicht mehr reagiert.Use asynchronous I/O operations when developing Windows 8.x StoreWindows 8.x Store apps to prevent creating the impression that your app has stopped working.

Die asynchronen Member enthalten den Begriff Async in ihren Namen, z. B. die Methoden CopyToAsync, FlushAsync, ReadAsync und WriteAsync.The asynchronous members contain Async in their names, such as the CopyToAsync, FlushAsync, ReadAsync, and WriteAsync methods. Diese Methoden müssen mit den Schlüsselwörtern async und await verwendet werden.You use these methods with the async and await keywords.

Weitere Informationen finden Sie unter Asynchrone Datei-E/A.For more information, see Asynchronous File I/O.

KomprimierungCompression

Komprimierung bezieht sich auf das Verkleinern einer Datei zum Zweck der Speicherung.Compression refers to the process of reducing the size of a file for storage. Bei einer Dekomprimierung wird der Inhalt einer komprimierten Datei extrahiert und in ein verwendbares Format gebracht.Decompression is the process of extracting the contents of a compressed file so they are in a usable format. Der System.IO.Compression-Namespace enthält Typen zum Komprimieren und Dekomprimieren von Dateien und Streams.The System.IO.Compression namespace contains types for compressing and decompressing files and streams.

Die folgenden Klassen werden häufig zum Komprimieren und Dekomprimieren von Dateien und Streams verwendet:The following classes are frequently used when compressing and decompressing files and streams:

  • ZipArchive – Erstellen und Abrufen von Einträgen im ZIP-Archiv.ZipArchive – for creating and retrieving entries in the zip archive.

  • ZipArchiveEntry – Darstellen einer komprimierten Datei.ZipArchiveEntry – for representing a compressed file.

  • ZipFile – Erstellen, Extrahieren und Öffnen eines komprimierten Pakets.ZipFile – for creating, extracting, and opening a compressed package.

  • ZipFileExtensions – Erstellen und Extrahieren von Einträgen in einem komprimierten Paket.ZipFileExtensions – for creating and extracting entries in a compressed package.

  • DeflateStream – Komprimieren und Dekomprimieren von Streams mit dem Deflate-Algorithmus.DeflateStream – for compressing and decompressing streams using the Deflate algorithm.

  • GZipStream – Komprimieren und Dekomprimieren von Streams im gzip-Datenformat.GZipStream – for compressing and decompressing streams in gzip data format.

Weitere Informationen finden Sie unter Gewusst wie: Komprimieren und Extrahieren von Dateien.See How to: Compress and Extract Files.

Isolierte SpeicherungIsolated Storage

Isolierte Speicherung ist ein Mechanismus zur Datenspeicherung, der Isolation und Sicherheit gewährleistet. Dies wird durch die Definition standardisierter Verknüpfungen von Code mit gespeicherten Daten ermöglicht.Isolated storage is a data storage mechanism that provides isolation and safety by defining standardized ways of associating code with saved data. Der Speicher enthält ein virtuelles Dateisystem, das nach Benutzer, Assembly und Domäne (optional) isoliert ist.The storage provides a virtual file system that is isolated by user, assembly, and (optionally) domain. Ein isolierter Speicher ist besonders nützlich, wenn Ihre Anwendung keine Berechtigung für den Zugriff auf Benutzerdateien hat.Isolated storage is particularly useful when your application does not have permission to access user files. Sie können die Einstellungen oder Dateien für die Anwendung so speichern, dass eine Kontrolle durch die Sicherheitsrichtlinien des Computers gewährleistet ist.You can save settings or files for your application in a manner that is controlled by the computer's security policy.

Die isolierte Speicherung ist für Windows 8.x StoreWindows 8.x Store-Apps nicht verfügbar. Verwenden Sie stattdessen Anwendungsdatenklassen im Windows.Storage-Namespace.Isolated storage is not available for Windows 8.x StoreWindows 8.x Store apps; instead, use application data classes in the Windows.Storage namespace. Weitere Informationen finden Sie im Windows Developer Center unter Anwendungsdaten.For more information, see Application data in the Windows Dev Center.

Die folgenden Klassen werden häufig zum Implementieren isolierter Speicher verwendet:The following classes are frequently used when implementing isolated storage:

Weitere Informationen finden Sie unter Isolierter Speicher.See Isolated Storage.

E/A-Vorgänge in Windows Store-AppsI/O Operations in Windows Store apps

Das .NET für Windows 8.x Store-Apps.NET for Windows 8.x Store apps enthält viele der Typen zum Lesen und Schreiben in Streams. Jedoch sind nicht alle E/A-Typen von .NET Framework verfügbar.The .NET für Windows 8.x Store-Apps.NET for Windows 8.x Store apps contains many of the types for reading from and writing to streams; however, this set does not include all the .NET Framework I/O types.

Beachten Sie jedoch die folgenden wichtigen Unterschiede, wenn Sie E/A-Vorgänge in Windows 8.x StoreWindows 8.x Store-Apps verwenden:Some important differences to note when using I/O operations in Windows 8.x StoreWindows 8.x Store apps:

Sie können .NET Framework-Streams in Windows-Runtime-Streams konvertieren und umgekehrt, falls erforderlich.You can convert between .NET Framework streams and Windows Runtime streams, if necessary. Weitere Informationen finden Sie unter Gewusst wie: Konvertieren zwischen .NET Framework-Streams und Windows-Runtime-Streams oder System.IO.WindowsRuntimeStreamExtensions.For more information, see How to: Convert Between .NET Framework Streams and Windows Runtime Streams or System.IO.WindowsRuntimeStreamExtensions.

Weitere Informationen zu E/A-Vorgängen in einer Windows 8.x StoreWindows 8.x Store-App finden Sie unter Schnellstart: Lesen und Schreiben von Dateien.For more information about I/O operations in a Windows 8.x StoreWindows 8.x Store app, see Quickstart: Reading and writing files.

E/A und SicherheitI/O and Security

Wenn Sie die Klassen im System.IO-Namespace verwenden, müssen die Sicherheitsanforderungen des Betriebssystems erfüllt sein, z. B. Zugriffssteuerungslisten (ACLs), um den Zugriff auf Dateien und Verzeichnisse zu steuern.When you use the classes in the System.IO namespace, you must follow operating system security requirements such as access control lists (ACLs) to control access to files and directories. Dies gilt zusätzlich zu anderen FileIOPermission-Anforderungen.This requirement is in addition to any FileIOPermission requirements. ACLs können programmgesteuert verwaltet werden.You can manage ACLs programmatically. Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen oder Entfernen von Zugriffssteuerungslisten-Einträgen.For more information, see How to: Add or Remove Access Control List Entries.

Standardsicherheitsrichtlinien verhindern den Zugriff von Internet- oder Intranetanwendungen auf Dateien, die sich auf dem Computer des Benutzers befinden.Default security policies prevent Internet or intranet applications from accessing files on the user’s computer. Verwenden Sie daher beim Schreiben von Code, der über das Internet oder Intranet heruntergeladen wird, keine E/A-Klassen, für die ein Pfad zu einer physischen Datei erforderlich ist.Therefore, do not use the I/O classes that require a path to a physical file when writing code that will be downloaded over the Internet or intranet. Verwenden Sie stattdessen isolierte Speicherung für herkömmliche .NET Framework-Anwendungen oder Anwendungsdaten für Windows 8.x StoreWindows 8.x Store-Apps.Instead, use isolated storage for traditional .NET Framework applications, or use application data for Windows 8.x StoreWindows 8.x Store apps.

Eine Sicherheitsüberprüfung wird nur beim Erstellen des Streams ausgeführt.A security check is performed only when the stream is constructed. Übergeben Sie daher keinen geöffneten Stream an weniger vertrauenswürdigen Code oder an Anwendungsdomänen.Therefore, do not open a stream and then pass it to less-trusted code or application domains.

Stellt eine Liste von E/A-Aufgaben bereit, die Dateien, Verzeichnissen und Streams zugeordnet sind, und verknüpft jede Aufgabe mit relevanten Inhalten und Beispielen.Provides a list of I/O tasks associated with files, directories, and streams, and links to relevant content and examples for each task.

Beschreibt die Leistungsvorteile und den grundlegenden Ablauf der asynchronen E/A.Describes the performance advantages and basic operation of asynchronous I/O.

Beschreibt einen Mechanismus zur Datenspeicherung, der durch Definition einer standardisierten Zuordnung von Code zu gespeicherten Daten Isolierung und Sicherheit gewährleistet.Describes a data storage mechanism that provides isolation and safety by defining standardized ways of associating code with saved data.

Beschreibt anonyme und benannte Pipevorgänge im .NET Framework.Describes anonymous and named pipe operations in the .NET Framework.

Beschreibt Speicherabbilddateien, die den Inhalt von Dateien auf dem Datenträger im virtuellen Arbeitsspeicher enthalten.Describes memory-mapped files, which contain the contents of files on disk in virtual memory. Sie können Speicherabbilddateien verwenden, um sehr große Dateien zu bearbeiten und gemeinsam genutzten Speicherbereich für die prozessübergreifende Kommunikation zu erstellen.You can use memory-mapped files to edit very large files and to create shared memory for interprocess communication.