FileStream.Read Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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)
- Źródło:
- FileStream.cs
- Źródło:
- FileStream.cs
- Źródło:
- FileStream.cs
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 (count
offset
+ - 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
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);
}
}
}
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
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ż
- We/wy plików i Stream
- Instrukcje: Odczytywanie tekstu z pliku
- Instrukcje: Zapisywanie tekstu w pliku
Dotyczy
Read(Span<Byte>)
- Źródło:
- FileStream.cs
- Źródło:
- FileStream.cs
- Źródło:
- FileStream.cs
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
Region pamięci. Gdy ta metoda zwróci wartość , zawartość tego regionu jest zastępowana przez bajty odczytane ze strumienia bieżącego pliku.
Zwraca
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.