Compartir vía


FileStream.Read Método

Definición

Sobrecargas

Read(Byte[], Int32, Int32)

Lee un bloque de bytes de la secuencia y escribe los datos en un búfer dado.

Read(Span<Byte>)

Lee una secuencia de bytes de la secuencia de archivo actual y avanza la posición en esta secuencia de archivo según el número de bytes leídos.

Read(Byte[], Int32, Int32)

Source:
FileStream.cs
Source:
FileStream.cs
Source:
FileStream.cs

Lee un bloque de bytes de la secuencia y escribe los datos en un búfer dado.

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[]

Cuando este método devuelve un valor, contiene la matriz de bytes especificada con los valores entre offset y (offset + count - 1) reemplazados por los bytes leídos desde el origen actual.

offset
Int32

Desplazamiento de bytes en array donde se colocarán los bytes leídos.

count
Int32

Número máximo de bytes que se pueden leer.

Devoluciones

Número total de bytes leídos en el búfer. Puede ser menor que el número de bytes solicitado si ese número de bytes no está disponible actualmente o cero si se ha alcanzado el final de la secuencia.

Excepciones

array es null.

offset o count es negativo.

La secuencia no admite lectura.

Error de E/S.

offset y count describen un intervalo no válido en array.

Se efectuó una llamada a los métodos después de cerrar la secuencia.

Ejemplos

En el ejemplo siguiente se lee el contenido de y FileStream se escribe en otro 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

Comentarios

Este método invalida Read.

El offset parámetro proporciona el desplazamiento del byte en array (el índice de búfer) en el que se va a empezar a leer y el count parámetro proporciona el número máximo de bytes que se van a leer desde esta secuencia. El valor devuelto es el número real de bytes leídos o cero si se alcanza el final de la secuencia. Si la operación de lectura se realiza correctamente, la posición actual de la secuencia está avanzada por el número de bytes leídos. Si se produce una excepción, la posición actual de la secuencia no cambia.

El Read método devuelve cero solo después de alcanzar el final de la secuencia. De lo contrario, Read siempre lee al menos un byte de la secuencia antes de devolverlo. Si no hay datos disponibles desde la secuencia tras una llamada a Read, el método se bloqueará hasta que se pueda devolver al menos un byte de datos. Una implementación es libre para devolver menos bytes de los solicitados incluso si no se ha alcanzado el final de la secuencia.

Se usa BinaryReader para leer tipos de datos primitivos.

No interrumpa un subproceso que esté realizando una operación de lectura. Aunque la aplicación puede parecer que se ejecuta correctamente después de desbloquear el subproceso, la interrupción puede reducir el rendimiento y la confiabilidad de la aplicación.

Para obtener una lista de las operaciones comunes de archivos y directorios, consulte Tareas comunes de E/S.

Consulte también

Se aplica a

Read(Span<Byte>)

Source:
FileStream.cs
Source:
FileStream.cs
Source:
FileStream.cs

Lee una secuencia de bytes de la secuencia de archivo actual y avanza la posición en esta secuencia de archivo según el número de bytes leídos.

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>

Región de memoria. Cuando este método finaliza, el contenido de esta región se reemplaza por los bytes leídos de la secuencia de archivo actual.

Devoluciones

Número total de bytes leídos en el búfer. Puede ser menor que el número de bytes asignado en el búfer si esos bytes no están disponibles en ese momento o cero (0) si se ha alcanzado el final de la secuencia.

Comentarios

Utilice la CanRead propiedad para determinar si la instancia actual admite la lectura. Use el ReadAsync método para leer de forma asincrónica desde la secuencia actual.

Este método lee un máximo de buffer.Length bytes de la secuencia de archivos actual y los almacena en buffer. La posición actual dentro de la secuencia de archivos está avanzada por el número de bytes leídos; sin embargo, si se produce una excepción, la posición actual dentro de la secuencia de archivos permanece sin cambios. El método se bloqueará hasta que se pueda leer al menos un byte de datos, en caso de que no haya datos disponibles. Read devuelve 0 solo cuando no hay más datos en la secuencia de archivos y no se espera más (por ejemplo, un socket cerrado o el final del archivo). El método es libre de devolver menos bytes de los solicitados incluso si no se ha alcanzado el final de la secuencia de archivos.

Se usa BinaryReader para leer tipos de datos primitivos.

Se aplica a