Compartir vía


FileStream.Read Método

Definición

Sobrecargas

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

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

Read(Span<Byte>)

Lee una secuencia de bytes de la secuencia de archivos actual y avanza la posición dentro de la secuencia de archivos por el número de bytes leídos.

Read(Byte[], Int32, Int32)

Source:
FileStream.cs
Source:
FileStream.cs
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 determinado.

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, contiene la matriz de bytes especificada con los valores entre offset y (offset + count - 1) reemplazados por los bytes leídos del origen actual.

offset
Int32

Desplazamiento de bytes en el array que se colocarán los bytes de lectura.

count
Int32

Número máximo de bytes que se van a 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 alcanza el final de la secuencia.

Excepciones

array es null.

offset o count es negativo.

La secuencia no admite la lectura.

Error de E/S.

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

Se llamó 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 realiza una operación de lectura. Aunque puede parecer que la aplicación 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
Source:
FileStream.cs
Source:
FileStream.cs

Lee una secuencia de bytes de la secuencia de archivos actual y avanza la posición dentro de la secuencia de archivos por 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>

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

Devoluciones

Número total de bytes leídos en el búfer. Puede ser menor que el número de bytes asignados en el búfer si no hay muchos bytes disponibles actualmente o cero (0) si se ha alcanzado el final de la secuencia.

Comentarios

Use 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 del flujo 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 el flujo de archivos y no se espera más (por ejemplo, un socket cerrado o el final del archivo). El método es libre para 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