FileStream.Read Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
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.