FileStream.Read Método

Definição

Sobrecargas

Name Description
Read(Byte[], Int32, Int32)

Lê um bloco de bytes do fluxo e escreve os dados num dado buffer.

Read(Span<Byte>)

Lê uma sequência de bytes do fluxo de ficheiros atual e avança a posição dentro do fluxo pelo número de bytes lidos.

Read(Byte[], Int32, Int32)

Origem:
FileStream.cs
Origem:
FileStream.cs
Origem:
FileStream.cs
Origem:
FileStream.cs
Origem:
FileStream.cs

Lê um bloco de bytes do fluxo e escreve os dados num dado 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

Parâmetros

arraybuffer
Byte[]

Quando este método retorna, contém o array de bytes especificado com os valores entre offset e (offset + count - 1)) substituídos pelos bytes lidos da fonte atual.

offset
Int32

O deslocamento do byte em array que os bytes de leitura serão colocados.

count
Int32

O número máximo de bytes a ler.

Devoluções

O número total de bytes lidos no buffer. Isto pode ser inferior ao número de bytes solicitados se esse número de bytes não estiver disponível atualmente, ou zero se o fim do fluxo for atingido.

Exceções

array é null.

offset ou count é negativo.

O stream não suporta leitura.

Ocorreu um erro de I/O.

offset e count descrevem um intervalo inválido em array.

Os métodos foram chamados após o encerramento do riacho.

Exemplos

O exemplo seguinte lê o conteúdo de a FileStream e escreve-o noutro 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

Observações

Este método substitui o Read.

O offset parâmetro indica o deslocamento do byte em array (o índice do buffer) a partir do qual se pode iniciar a leitura, e o count parâmetro indica o número máximo de bytes a serem lidos deste fluxo. O valor devolvido é o número real de bytes lidos, ou zero se o fim do fluxo for atingido. Se a operação de leitura for bem-sucedida, a posição atual do fluxo é avançada pelo número de bytes lidos. Se ocorrer uma exceção, a posição atual do fluxo mantém-se inalterada.

O Read método devolve zero apenas depois de chegar ao fim do fluxo. Caso contrário, Read lê sempre pelo menos um byte do stream antes de regressar. Se não houver dados disponíveis do fluxo durante uma chamada para Read, o método bloqueará até que pelo menos um byte de dados possa ser devolvido. Uma implementação pode devolver menos bytes do que o solicitado, mesmo que o fim do fluxo não tenha sido atingido.

Usar BinaryReader para ler tipos de dados primitivos.

Não interrompa um thread que esteja a realizar uma operação de leitura. Embora a aplicação possa parecer correr com sucesso depois de a thread ser desbloqueada, a interrupção pode diminuir o desempenho e a fiabilidade da sua aplicação.

Para obter uma lista de operações comuns de arquivos e diretórios, consulte Tarefas comuns de E/S.

Ver também

Aplica-se a

Read(Span<Byte>)

Origem:
FileStream.cs
Origem:
FileStream.cs
Origem:
FileStream.cs
Origem:
FileStream.cs
Origem:
FileStream.cs

Lê uma sequência de bytes do fluxo de ficheiros atual e avança a posição dentro do fluxo pelo número de bytes lidos.

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

Parâmetros

buffer
Span<Byte>

Uma região da memória. Quando este método retorna, o conteúdo desta região é substituído pelos bytes lidos do fluxo de ficheiros atual.

Devoluções

O número total de bytes lidos no buffer. Isto pode ser inferior ao número de bytes alocados no buffer se esse número de bytes não estiver disponível no momento, ou zero (0) se o fim do fluxo for atingido.

Observações

Use a CanRead propriedade para determinar se a instância atual suporta leitura. Use o ReadAsync método para ler assíncronamente a partir do fluxo atual.

Este método lê um máximo de buffer.Length bytes do fluxo de ficheiros atual e armazena-os em buffer. A posição atual dentro do fluxo de ficheiros é avançada pelo número de bytes lidos; no entanto, se ocorrer uma exceção, a posição atual dentro do fluxo de ficheiros mantém-se inalterada. O método irá bloquear até que pelo menos um byte de dados possa ser lido, caso não haja dados disponíveis. Read devolve 0 apenas quando não há mais dados no fluxo de ficheiros e não se espera mais (como um soquete fechado ou fim de ficheiro). O método pode devolver menos bytes do que o solicitado, mesmo que o fim do fluxo de ficheiros não tenha sido atingido.

Usar BinaryReader para ler tipos de dados primitivos.

Aplica-se a