FileStream.Read Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Overload
Read(Byte[], Int32, Int32) |
Legge un blocco di byte dal flusso e scrive i dati in un determinato buffer. |
Read(Span<Byte>) |
Legge una sequenza di byte dal flusso di file corrente e fa avanzare la posizione corrente nel flusso di file del numero di byte letti. |
Read(Byte[], Int32, Int32)
- Origine:
- FileStream.cs
- Origine:
- FileStream.cs
- Origine:
- FileStream.cs
Legge un blocco di byte dal flusso e scrive i dati in un determinato buffer.
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
Parametri
- arraybuffer
- Byte[]
Quando questo metodo viene restituito, contiene la matrice di byte specificata con i valori compresi tra offset
e (offset
+ count
- 1)
sostituiti con i byte letti dall'origine corrente.
- offset
- Int32
Offset dei byte in array
in corrispondenza del quale cui verranno inseriti i byte letti.
- count
- Int32
Numero massimo di byte da leggere.
Restituisce
Numero complessivo di byte letti nel buffer. Può essere inferiore al numero dei byte richiesti se tale numero di byte non è disponibile oppure pari a zero se è stata raggiunta la fine del flusso.
Eccezioni
array
è null
.
offset
o count
è negativo.
Il flusso non supporta la lettura.
Si è verificato un errore di I/O.
offset
e count
descrivono un intervallo non valido in array
.
Sono stati chiamati dei metodi dopo la chiusura del flusso.
Esempio
Nell'esempio seguente il contenuto viene letto da un oggetto FileStream e lo scrive in un altro FileStreamoggetto .
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
Commenti
Questo metodo esegue l'override di Read.
Il offset
parametro fornisce l'offset del byte in array
(indice buffer) in cui iniziare la lettura e il count
parametro fornisce il numero massimo di byte da leggere da questo flusso. Il valore restituito è il numero effettivo di byte letti o zero se viene raggiunta la fine del flusso. Se l'operazione di lettura ha esito positivo, la posizione corrente del flusso è avanzata dal numero di byte letti. Se si verifica un'eccezione, la posizione corrente del flusso è invariata.
Il Read metodo restituisce zero solo dopo aver raggiunto la fine del flusso. In caso contrario, Read legge sempre almeno un byte dal flusso prima di restituire. Se non sono disponibili dati dal flusso dopo una chiamata a , il metodo blocca fino a Readquando non è possibile restituire almeno un byte di dati. Un'implementazione è gratuita per restituire meno byte rispetto alla richiesta anche se la fine del flusso non è stata raggiunta.
Usare BinaryReader per la lettura dei tipi di dati primitivi.
Non interrompere un thread che esegue un'operazione di lettura. Anche se l'applicazione potrebbe essere eseguita correttamente dopo aver sbloccato il thread, l'interruzione può ridurre le prestazioni e l'affidabilità dell'applicazione.
Per un elenco di operazioni di file e directory comuni, vedere Attività di I/O comuni.
Vedi anche
Si applica a
Read(Span<Byte>)
- Origine:
- FileStream.cs
- Origine:
- FileStream.cs
- Origine:
- FileStream.cs
Legge una sequenza di byte dal flusso di file corrente e fa avanzare la posizione corrente nel flusso di file del numero di byte letti.
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
Parametri
Un'area di memoria. Quando questo metodo termina, il contenuto di quest'area viene sostituito dai byte letti dal flusso di file corrente.
Restituisce
Numero complessivo di byte letti nel buffer. È possibile che questo numero sia inferiore a quello dei byte allocati nel buffer se la quantità di byte disponibili è minore oppure che corrisponda a zero (0) se è stata raggiunta la fine del flusso.
Commenti
Utilizzare la proprietà per determinare se l'istanza CanRead corrente supporta la lettura. Usare il ReadAsync metodo per leggere in modo asincrono dal flusso corrente.
Questo metodo legge un massimo di byte dal flusso di buffer.Length
file corrente e li archivia in buffer
. La posizione corrente all'interno del flusso di file è avanzata dal numero di byte letti; Tuttavia, se si verifica un'eccezione, la posizione corrente all'interno del flusso di file rimane invariata. Il metodo blocca fino a quando non è possibile leggere almeno un byte di dati, nel caso in cui non siano disponibili dati. Read
restituisce 0 solo quando non sono presenti più dati nel flusso di file e non è più previsto (ad esempio un socket chiuso o una fine di file). Il metodo è libero di restituire meno byte rispetto alla richiesta anche se la fine del flusso di file non è stata raggiunta.
Usare BinaryReader per la lettura dei tipi di dati primitivi.