Condividi tramite


FileStream.Read Metodo

Definizione

Overload

Nome Descrizione
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 sposta in avanti la posizione all'interno del flusso di file in base al numero di byte letti.

Read(Byte[], Int32, Int32)

Origine:
FileStream.cs
Origine:
FileStream.cs
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 termina, questo metodo contiene la matrice di byte specificata con i valori compresi tra offset e (countoffset + - 1) sostituiti dai byte letti dall'origine corrente.

offset
Int32

Offset di byte in in array corrispondenza del quale verranno posizionati i byte letti.

count
Int32

Numero massimo di byte da leggere.

Restituisce

Numero totale di byte letti nel buffer. Potrebbe essere minore del numero di byte richiesti se tale numero di byte non è attualmente disponibile oppure zero se viene 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.

I metodi sono stati chiamati 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 del buffer) in corrispondenza del quale iniziare la lettura e il count parametro assegna 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 viene avanzata dal numero di byte letti. Se si verifica un'eccezione, la posizione corrente del flusso rimane 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 in una chiamata a Read, il metodo bloccherà fino a quando non sarà possibile restituire almeno un byte di dati. Un'implementazione è libera di restituire meno byte di quanto richiesto 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 sembrare eseguita correttamente dopo lo sblocco del thread, l'interruzione può ridurre le prestazioni e l'affidabilità dell'applicazione.

Per un elenco delle operazioni comuni di file e directory, vedere Attività di I/O comuni.

Vedi anche

Si applica a

Read(Span<Byte>)

Origine:
FileStream.cs
Origine:
FileStream.cs
Origine:
FileStream.cs
Origine:
FileStream.cs
Origine:
FileStream.cs

Legge una sequenza di byte dal flusso di file corrente e sposta in avanti la posizione all'interno del flusso di file in base al 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

buffer
Span<Byte>

Area di memoria. Quando termina, il contenuto di questa area viene sostituito dai byte letti dal flusso di file corrente.

Restituisce

Numero totale di byte letti nel buffer. Può essere minore del numero di byte allocati nel buffer se molti byte non sono attualmente disponibili oppure zero (0) se è stata raggiunta la fine del flusso.

Commenti

Utilizzare la CanRead proprietà per determinare se l'istanza corrente supporta la lettura. Usare il ReadAsync metodo per leggere in modo asincrono dal flusso corrente.

Questo metodo legge un massimo di buffer.Length byte dal flusso di 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 verrà bloccato 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 la fine del file). Il metodo è libero di restituire meno byte di quanto richiesto anche se non è stata raggiunta la fine del flusso di file.

Usare BinaryReader per la lettura dei tipi di dati primitivi.

Si applica a