FileStream.Read Methode

Definition

Überlädt

Read(Byte[], Int32, Int32)

Liest einen Byteblock aus dem Stream und schreibt die Daten in einen angegebenen Puffer.

Read(Span<Byte>)

Liest eine Bytesequenz aus dem aktuellen Dateidatenstrom und setzt die Position in diesem Dateidatenstrom um die Anzahl der gelesenen Bytes nach vorn.

Read(Byte[], Int32, Int32)

Quelle:
FileStream.cs
Quelle:
FileStream.cs
Quelle:
FileStream.cs

Liest einen Byteblock aus dem Stream und schreibt die Daten in einen angegebenen Puffer.

public:
 override int Read(cli::array <System::Byte> ^ array, int offset, int count);
public:
 override int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public override int Read (byte[] array, int offset, int count);
public override int Read (byte[] buffer, int offset, int count);
override this.Read : byte[] * int * int -> int
override this.Read : byte[] * int * int -> int
Public Overrides Function Read (array As Byte(), offset As Integer, count As Integer) As Integer
Public Overrides Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer

Parameter

arraybuffer
Byte[]

Enthält nach dem Beenden dieser Methode das angegebene Bytearray mit den Werten zwischen offset und (offset + count - 1), die durch die aus der aktuellen Quelle gelesenen Bytes ersetzt wurden.

offset
Int32

Das Byteoffset in array, an dem die gelesenen Bytes platziert werden.

count
Int32

Die maximale Anzahl der zu lesenden Bytes.

Gibt zurück

Die Gesamtanzahl der in den Puffer gelesenen Bytes. Dies kann weniger als die Anzahl der angeforderten Bytes sein, wenn diese Anzahl an Bytes derzeit nicht verfügbar ist, oder 0, wenn das Streamende erreicht ist.

Ausnahmen

array ist null.

offset oder count ist ein negativer Wert.

Lesevorgänge werden vom Stream nicht unterstützt.

E/A-Fehler

offset und count bezeichnen einen ungültigen Bereich in array.

Es wurden Methoden aufgerufen, nachdem der Stream geschlossen wurde.

Beispiele

Im folgenden Beispiel wird der Inhalt aus einem gelesen und in eine FileStream andere FileStreamgeschrieben.

using System;
using System.IO;

class Test
{

public static void Main()
{
    // Specify a file to read from and to create.
    string pathSource = @"c:\tests\source.txt";
    string pathNew = @"c:\tests\newfile.txt";

    try
    {

        using (FileStream fsSource = new FileStream(pathSource,
            FileMode.Open, FileAccess.Read))
        {

            // Read the source file into a byte array.
            byte[] bytes = new byte[fsSource.Length];
            int numBytesToRead = (int)fsSource.Length;
            int numBytesRead = 0;
            while (numBytesToRead > 0)
            {
                // Read may return anything from 0 to numBytesToRead.
                int n = fsSource.Read(bytes, numBytesRead, numBytesToRead);

                // Break when the end of the file is reached.
                if (n == 0)
                    break;

                numBytesRead += n;
                numBytesToRead -= n;
            }
             numBytesToRead = bytes.Length;

            // Write the byte array to the other FileStream.
            using (FileStream fsNew = new FileStream(pathNew,
                FileMode.Create, FileAccess.Write))
            {
                fsNew.Write(bytes, 0, numBytesToRead);
            }
        }
    }
    catch (FileNotFoundException ioEx)
    {
        Console.WriteLine(ioEx.Message);
    }
}
}
open System.IO

// Specify a file to read from and to create.
let pathSource = @"c:\tests\source.txt"
let pathNew = @"c:\tests\newfile.txt"

try
    use fsSource = new FileStream(pathSource, FileMode.Open, FileAccess.Read)

    // Read the source file into a byte array.
    let mutable numBytesToRead = int fsSource.Length
    let bytes = numBytesToRead |> Array.zeroCreate
    let mutable numBytesRead = 0

    while numBytesToRead > 0 do
        // Read may return anything from 0 to numBytesToRead.
        let n = fsSource.Read(bytes, numBytesRead, numBytesToRead)

        // Break when the end of the file is reached.
        if n <> 0 then
            numBytesRead <- numBytesRead + n
            numBytesToRead <- numBytesToRead - n

    let numBytesToRead = bytes.Length

    // Write the byte array to the other FileStream.
    use fsNew = new FileStream(pathNew, FileMode.Create, FileAccess.Write)
    fsNew.Write(bytes, 0, numBytesToRead)
with :? FileNotFoundException as ioEx ->
    printfn $"{ioEx.Message}"
Imports System.IO
Class Test
    
Public Shared Sub Main()
    ' Specify a file to read from and to create.
    Dim pathSource As String = "c:\tests\source.txt"
    Dim pathNew As String = "c:\tests\newfile.txt"
    Try 
        Using fsSource As FileStream = New FileStream(pathSource, _
            FileMode.Open, FileAccess.Read)
            ' Read the source file into a byte array.
                Dim bytes() As Byte = New Byte((fsSource.Length) - 1) {}
                Dim numBytesToRead As Integer = CType(fsSource.Length,Integer)
                Dim numBytesRead As Integer = 0

                While (numBytesToRead > 0)
                    ' Read may return anything from 0 to numBytesToRead.
                    Dim n As Integer = fsSource.Read(bytes, numBytesRead, _
                        numBytesToRead)
                    ' Break when the end of the file is reached.
                    If (n = 0) Then
                        Exit While
                    End If
                    numBytesRead = (numBytesRead + n)
                    numBytesToRead = (numBytesToRead - n)

                End While
            numBytesToRead = bytes.Length

            ' Write the byte array to the other FileStream.
            Using fsNew As FileStream = New FileStream(pathNew, _
                FileMode.Create, FileAccess.Write)
                fsNew.Write(bytes, 0, numBytesToRead)
            End Using
        End Using
    Catch ioEx As FileNotFoundException
        Console.WriteLine(ioEx.Message)
    End Try
End Sub
End Class

Hinweise

Diese Methode überschreibt Read.

Der offset Parameter gibt den Offset des Byte in array (des Pufferindexes) an, an dem mit dem Lesen begonnen werden soll, und der count Parameter gibt die maximale Anzahl von Bytes an, die aus diesem Stream gelesen werden sollen. Der zurückgegebene Wert ist die tatsächliche Anzahl der gelesenen Bytes oder null, wenn das Ende des Datenstroms erreicht ist. Wenn der Lesevorgang erfolgreich ist, wird die aktuelle Position des Datenstroms um die Anzahl der gelesenen Bytes erweitert. Wenn eine Ausnahme auftritt, bleibt die aktuelle Position des Datenstroms unverändert.

Die Read -Methode gibt nur null zurück, nachdem das Ende des Datenstroms erreicht wurde. Read Andernfalls liest vor der Rückgabe immer mindestens ein Byte aus dem Stream. Wenn bei einem Aufruf Readvon keine Daten aus dem Stream verfügbar sind, blockiert die -Methode, bis mindestens ein Byte von Daten zurückgegeben werden kann. Eine Implementierung kann auch dann weniger Bytes als angefordert zurückgeben, wenn das Ende des Datenstroms nicht erreicht wurde.

Verwenden Sie BinaryReader zum Lesen primitiver Datentypen.

Unterbrechen Sie keinen Thread, der einen Lesevorgang ausführt. Obwohl die Anwendung nach dem Aufheben der Blockierung des Threads erfolgreich ausgeführt werden kann, kann die Unterbrechung die Leistung und Zuverlässigkeit Ihrer Anwendung beeinträchtigen.

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

Weitere Informationen

Gilt für:

Read(Span<Byte>)

Quelle:
FileStream.cs
Quelle:
FileStream.cs
Quelle:
FileStream.cs

Liest eine Bytesequenz aus dem aktuellen Dateidatenstrom und setzt die Position in diesem Dateidatenstrom um die Anzahl der gelesenen Bytes nach vorn.

public:
 override int Read(Span<System::Byte> buffer);
public override int Read (Span<byte> buffer);
override this.Read : Span<byte> -> int
Public Overrides Function Read (buffer As Span(Of Byte)) As Integer

Parameter

buffer
Span<Byte>

Ein Bereich im Arbeitsspeicher. Bei der Rückgabe dieser Methode werden die Inhalte dieses Bereichs durch die aus dem aktuellen Dateidatenstrom gelesenen Bytes ersetzt.

Gibt zurück

Die Gesamtanzahl der in den Puffer gelesenen Bytes. Dies kann weniger als die Anzahl der im Puffer zugeordneten Bytes sein, wenn diese Anzahl an Bytes derzeit nicht verfügbar ist, oder 0 (null), wenn das Ende des Streams erreicht ist.

Hinweise

Verwenden Sie die CanRead -Eigenschaft, um zu bestimmen, ob die aktuelle Instanz Lesevorgänge unterstützt. Verwenden Sie die ReadAsync -Methode, um asynchron aus dem aktuellen Stream zu lesen.

Diese Methode liest maximal buffer.Length Bytes aus dem aktuellen Dateidatenstrom und speichert sie in buffer. Die aktuelle Position innerhalb des Dateidatenstroms wird um die Anzahl der gelesenen Bytes erweitert. Wenn jedoch eine Ausnahme auftritt, bleibt die aktuelle Position im Dateidatenstrom unverändert. Die -Methode wird blockiert, bis mindestens ein Byte von Daten gelesen werden kann, falls keine Daten verfügbar sind. Read gibt nur 0 zurück, wenn im Dateidatenstrom keine Daten mehr vorhanden sind und keine weiteren (z. B. ein geschlossener Socket oder ein Dateiende) erwartet werden. Die -Methode kann auch dann weniger Bytes zurückgeben als angefordert, wenn das Ende des Dateidatenstroms nicht erreicht wurde.

Verwenden Sie BinaryReader zum Lesen primitiver Datentypen.

Gilt für: