Partilhar via


FileStream.Read Método

Definição

Sobrecargas

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

Lê um bloco de bytes do fluxo e grava os dados em um determinado buffer.

Read(Span<Byte>)

Lê uma sequência de bytes do fluxo de arquivos atual e avança a posição dentro do fluxo de arquivos 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 grava os dados em um determinado 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 esse método é retornado, contém a matriz de bytes especificada com os valores entre offset e (countoffset + – 1) substituído pelos bytes lidos da origem atual.

offset
Int32

O deslocamento de bytes no array qual os bytes de leitura serão colocados.

count
Int32

O número máximo de bytes a serem lidos.

Retornos

O número total de bytes lidos no buffer. Isso pode ser menor do que o número de bytes solicitados se esse número de bytes não estiver disponível no momento ou zero se o final do fluxo for atingido.

Exceções

array é null.

offset ou count é negativo.

O fluxo não dá suporte à leitura.

Ocorreu um erro de E/S.

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

Os métodos foram chamados depois que o fluxo foi fechado.

Exemplos

O exemplo a seguir lê o conteúdo de um FileStream e o grava em outro 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

Comentários

Este método substitui Read.

O offset parâmetro fornece o deslocamento do byte em array (o índice de buffer) no qual começar a ler e o count parâmetro fornece o número máximo de bytes a serem lidos desse fluxo. O valor retornado é o número real de bytes lidos ou zero se o final do fluxo for atingido. Se a operação de leitura for bem-sucedida, a posição atual do fluxo será avançada pelo número de bytes lidos. Se ocorrer uma exceção, a posição atual do fluxo ficará inalterada.

O Read método retorna zero somente depois de atingir o final do fluxo. Caso contrário, Read sempre lê pelo menos um byte do fluxo antes de retornar. Se nenhum dado estiver disponível no fluxo após uma chamada, Reado método será bloqueado até que pelo menos um byte de dados possa ser retornado. Uma implementação é livre para retornar menos bytes do que o solicitado, mesmo que o final do fluxo não tenha sido atingido.

Use BinaryReader para ler tipos de dados primitivos.

Não interrompa um thread que esteja executando uma operação de leitura. Embora o aplicativo pareça ser executado com êxito após o desbloqueio do thread, a interrupção pode diminuir o desempenho e a confiabilidade do aplicativo.

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

Confira 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 arquivos atual e avança a posição dentro do fluxo de arquivos 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 de memória. Quando esse método retorna, o conteúdo dessa região é substituído pelos bytes lidos do fluxo de arquivos atual.

Retornos

O número total de bytes lidos no buffer. Isso pode ser menor do que o número de bytes alocados no buffer se muitos bytes não estiverem disponíveis no momento ou zero (0) se o final do fluxo tiver sido atingido.

Comentários

Use a CanRead propriedade para determinar se a instância atual dá suporte à leitura. Use o ReadAsync método para ler de forma assíncrona do fluxo atual.

Esse método lê um máximo de buffer.Length bytes do fluxo de arquivos atual e os armazena em buffer. A posição atual no fluxo de arquivos é avançada pelo número de bytes lidos; no entanto, se ocorrer uma exceção, a posição atual no fluxo de arquivos permanecerá inalterada. O método será bloqueado até que pelo menos um byte de dados possa ser lido, caso nenhum dado esteja disponível. Read retorna 0 somente quando não há mais dados no fluxo de arquivos e não é esperado mais (como um soquete fechado ou fim do arquivo). O método é gratuito para retornar menos bytes do que o solicitado, mesmo que o final do fluxo de arquivos não tenha sido atingido.

Use BinaryReader para ler tipos de dados primitivos.

Aplica-se a