FileStream.Read Metoda

Definicja

Przeciążenia

Read(Byte[], Int32, Int32)

Odczytuje blok bajtów ze strumienia i zapisuje dane w danym buforze.

Read(Span<Byte>)

Odczytuje sekwencję bajtów z bieżącego strumienia plików i rozwija pozycję w strumieniu pliku o liczbę odczytanych bajtów.

Read(Byte[], Int32, Int32)

Odczytuje blok bajtów ze strumienia i zapisuje dane w danym buforze.

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

Parametry

arraybuffer
Byte[]

Gdy ta metoda zwraca wartość , zawiera określoną tablicę bajtów z wartościami między offset i (countoffset + - 1) zastąpionymi bajtami odczytanymi z bieżącego źródła.

offset
Int32

Przesunięcie bajtu, w array którym zostaną umieszczone bajty odczytu.

count
Int32

Maksymalna liczba bajtów do odczytania.

Zwraca

Int32

Całkowita liczba bajtów odczytanych do buforu. Może to być mniejsza niż liczba bajtów żądanych, jeśli ta liczba bajtów nie jest obecnie dostępna lub zero, jeśli osiągnięto koniec strumienia.

Wyjątki

array to null.

offset lub count jest ujemny.

Strumień nie obsługuje odczytu.

Wystąpił błąd we/wy.

offset i count opisz nieprawidłowy zakres w pliku array.

Metody zostały wywołane po zamknięciu strumienia.

Przykłady

Poniższy przykład odczytuje zawartość obiektu FileStream i zapisuje ją w innym pliku FileStream.

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);
    }
}
}
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

Uwagi

Ta metoda zastępuje metodę Read.

Parametr offset daje przesunięcie bajtu w array (indeks buforu), w którym można rozpocząć odczytywanie, a count parametr daje maksymalną liczbę bajtów do odczytu z tego strumienia. Zwracana wartość to rzeczywista liczba odczytanych bajtów lub zero, jeśli osiągnięto koniec strumienia. Jeśli operacja odczytu zakończy się pomyślnie, bieżąca pozycja strumienia jest zaawansowana przez liczbę odczytanych bajtów. Jeśli wystąpi wyjątek, bieżąca pozycja strumienia pozostaje niezmieniona.

Metoda Read zwraca zero dopiero po osiągnięciu końca strumienia. Read W przeciwnym razie zawsze odczytuje co najmniej jeden bajt ze strumienia przed zwróceniem. Jeśli żadne dane ze strumienia nie są dostępne po wywołaniu metody Read, metoda będzie blokować do momentu zwrócenia co najmniej jednego bajtu danych. Implementacja może zwracać mniej bajtów niż zażądano, nawet jeśli koniec strumienia nie został osiągnięty.

Służy BinaryReader do odczytywania typów danych pierwotnych.

Nie przerywaj wątku wykonującego operację odczytu. Mimo że aplikacja może wydawać się działać pomyślnie po odblokowaniu wątku, przerwa może zmniejszyć wydajność i niezawodność aplikacji.

Aby uzyskać listę typowych operacji dotyczących plików i katalogów, zobacz Typowe zadania we/wy.

Zobacz też

Dotyczy

Read(Span<Byte>)

Odczytuje sekwencję bajtów z bieżącego strumienia plików i rozwija pozycję w strumieniu pliku o liczbę odczytanych bajtów.

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

Parametry

buffer
Span<Byte>

Region pamięci. Gdy ta metoda zwróci wartość , zawartość tego regionu jest zastępowana przez bajty odczytane ze strumienia bieżącego pliku.

Zwraca

Int32

Całkowita liczba bajtów odczytanych do buforu. Może to być mniejsza niż liczba bajtów przydzielonych w buforze, jeśli liczba bajtów nie jest obecnie dostępna lub zero (0), jeśli koniec strumienia został osiągnięty.

Uwagi

Użyj właściwości , CanRead aby określić, czy bieżące wystąpienie obsługuje odczyt. ReadAsync Użyj metody , aby odczytywać asynchronicznie z bieżącego strumienia.

Ta metoda odczytuje maksymalnie buffer.Length bajty z bieżącego strumienia plików i przechowuje je w pliku buffer. Bieżące położenie w strumieniu plików jest zaawansowane przez liczbę odczytanych bajtów; jednak w przypadku wystąpienia wyjątku bieżące położenie w strumieniu plików pozostaje niezmienione. Metoda zostanie zablokowana do momentu odczytania co najmniej jednego bajtu danych w przypadku, gdy żadne dane nie są dostępne. Read Funkcja zwraca wartość 0 tylko wtedy, gdy nie ma więcej danych w strumieniu plików i nie oczekuje się więcej (np. zamkniętego gniazda lub końca pliku). Metoda jest bezpłatna, aby zwrócić mniej bajtów niż zażądano, nawet jeśli koniec strumienia plików nie został osiągnięty.

Służy BinaryReader do odczytywania typów danych pierwotnych.

Dotyczy