FileStream.BeginRead (Método) (System.IO)

Cambiar vista:
Sin script
Biblioteca de clases de .NET Framework
FileStream.BeginRead (Método)

Comienza una lectura asincrónica.

Espacio de nombres: System.IO
Ensamblado: mscorlib (en mscorlib.dll)

Sintaxis

Visual Basic (Declaración)
Public Overrides Function BeginRead ( _
	array As Byte(), _
	offset As Integer, _
	numBytes As Integer, _
	userCallback As AsyncCallback, _
	stateObject As Object _
) As IAsyncResult
Visual Basic (Uso)
Dim instance As FileStream
Dim array As Byte()
Dim offset As Integer
Dim numBytes As Integer
Dim userCallback As AsyncCallback
Dim stateObject As Object
Dim returnValue As IAsyncResult

returnValue = instance.BeginRead(array, offset, numBytes, userCallback, stateObject)
C#
public override IAsyncResult BeginRead (
	byte[] array,
	int offset,
	int numBytes,
	AsyncCallback userCallback,
	Object stateObject
)
C++
public:
virtual IAsyncResult^ BeginRead (
	array<unsigned char>^ array, 
	int offset, 
	int numBytes, 
	AsyncCallback^ userCallback, 
	Object^ stateObject
) override
J#
public IAsyncResult BeginRead (
	byte[] array, 
	int offset, 
	int numBytes, 
	AsyncCallback userCallback, 
	Object stateObject
)
JScript
public override function BeginRead (
	array : byte[], 
	offset : int, 
	numBytes : int, 
	userCallback : AsyncCallback, 
	stateObject : Object
) : IAsyncResult

Parámetros

array

Búfer en el que se leen los datos.

offset

Desplazamiento de bytes en el parámetro array donde debe comenzar la lectura.

numBytes

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

userCallback

Método al que se va a llamar cuando se complete la operación de lectura asincrónica.

stateObject

Objeto proporcionado por el usuario que distingue esta solicitud de lectura asincrónica de otras.

Valor devuelto

IAsyncResult que hace referencia a la lectura asincrónica.
Excepciones

Tipo de excepción Condición

ArgumentException

La longitud de matriz menos offset es menor que numBytes.

ArgumentNullException

array es referencia de objeto null (Nothing en Visual Basic).

ArgumentOutOfRangeException

El valor de offset o numBytes es negativo.

IOException

Se intentó realizar una lectura asincrónica después del final del archivo.

Comentarios

Se debe llamar con exactitud a EndRead para cada llamada a BeginRead. Si no se finaliza un proceso de lectura antes de comenzar otra lectura se puede producir un comportamiento no deseado, como el interbloqueo.

FileStream proporciona dos modos de funcionamiento distintos: E/S sincrónica y E/S asincrónica. Aunque puede utilizarse cualquiera de ellos, es posible que los recursos del sistema operativo subyacente permitan el acceso en sólo uno de estos modos. De forma predeterminada, FileStream abre el identificador del sistema operativo de manera sincrónica. En Windows, esto ralentiza los métodos asincrónicos. Si se utilizan métodos asincrónicos, se ha de usar el constructor FileStream(String,FileMode,FileAccess,FileShare,Int32,Boolean).

NotaNota

Se utiliza la propiedad CanRead para determinar si la instancia actual admite operaciones de lectura. Para obtener más información, vea CanRead.

Si una secuencia se encuentra cerrada o se pasa un argumento no válido, se producirán inmediatamente excepciones a partir de BeginRead. Los errores que se producen durante una solicitud de lectura asincrónica, como es el caso de un error en el disco durante una solicitud de E/S, tienen lugar en el subproceso del grupo de subprocesos y se hacen visibles en una llamada a EndRead.

NotaNota

En Windows, todas las operaciones de E/S menores de 64 KB se completarán de forma sincrónica para obtener un mejor rendimiento. Es posible que la E/S asincrónica dificulte el rendimiento en el caso de tamaños de búfer menores que 64 KB.

Para averiguar cuántos bytes se han leído, es necesario llamar a EndRead con este IAsyncResult.

La existencia de varias solicitudes asincrónicas simultáneas convertirán en incierta la orden de finalización de la solicitud.

En la siguiente tabla se muestran ejemplos de otras tareas de E/S típicas o relacionadas.

Para realizar esta operación...

Vea el ejemplo de este tema...

Crear un archivo de texto

Cómo: Escribir texto en un archivo

Escribir en un archivo de texto

Cómo: Escribir texto en un archivo

Leer de un archivo de texto

Cómo: Leer texto de un archivo

Anexar texto a un archivo

Cómo: Abrir y anexar a un archivo de registro

File.AppendText

FileInfo.AppendText

Cambiar de nombre o mover un archivo

File.Move

FileInfo.MoveTo

Copiar un archivo

File.Copy

FileInfo.CopyTo

Obtener el tamaño de un archivo

FileInfo.Length

Obtener los atributos de un archivo

File.GetAttributes

Establecer los atributos de un archivo

File.SetAttributes

Determinar si un archivo existe

File.Exists

Leer de un archivo binario

Cómo: Leer y escribir en un archivo de datos recién creado

Escribir en un archivo binario

Cómo: Leer y escribir en un archivo de datos recién creado

Crear un directorio

Directory.CreateDirectory

Directory.CreateDirectory

Ejemplo

Este ejemplo de código forma parte de un ejemplo más extenso referente al constructor FileStream(String,FileMode,FileAccess,FileShare,Int32,Boolean).

Visual Basic
Private Shared Sub EndWriteCallback(asyncResult As IAsyncResult)
    Dim tempState As State = _
        DirectCast(asyncResult.AsyncState, State)
    Dim fStream As FileStream = tempState.FStream
    fStream.EndWrite(asyncResult)

    ' Asynchronously read back the written data.
    fStream.Position = 0
    asyncResult = fStream.BeginRead( _ 
        tempState.ReadArray, 0 , tempState.ReadArray.Length, _
        AddressOf EndReadCallback, tempState)

    ' Concurrently do other work, such as 
    ' logging the write operation.
End Sub

C#
static void EndWriteCallback(IAsyncResult asyncResult)
{
    State tempState = (State)asyncResult.AsyncState;
    FileStream fStream = tempState.FStream;
    fStream.EndWrite(asyncResult);

    // Asynchronously read back the written data.
    fStream.Position = 0;
    asyncResult = fStream.BeginRead(
        tempState.ReadArray, 0 , tempState.ReadArray.Length, 
        new AsyncCallback(EndReadCallback), tempState);

    // Concurrently do other work, such as 
    // logging the write operation.
}

C++
   static void EndWriteCallback( IAsyncResult^ asyncResult )
   {
      State^ tempState = dynamic_cast<State^>(asyncResult->AsyncState);
      FileStream^ fStream = tempState->FStream;
      fStream->EndWrite( asyncResult );
      
      // Asynchronously read back the written data.
      fStream->Position = 0;
      asyncResult = fStream->BeginRead( tempState->ReadArray, 0, tempState->ReadArray->Length, gcnew AsyncCallback( &FStream::EndReadCallback ), tempState );
      
      // Concurrently do other work, such as 
      // logging the write operation.
   }

};



J#
static void EndWriteCallback(IAsyncResult asyncResult)
{
    State tempState = ((State)(asyncResult.get_AsyncState()));
    FileStream fStream = tempState.get_FStream();
    fStream.EndWrite(asyncResult);

    // Asynchronously read back the written data.
    fStream.set_Position(0);
    asyncResult = fStream.BeginRead(tempState.get_ReadArray(), 0,
        tempState.get_ReadArray().length , 
        new AsyncCallback(EndReadCallback), tempState);

    // Concurrently do other work, such as 
    // logging the write operation.
} //EndWriteCallback

Plataformas

Windows 98, Windows 2000 SP4, Windows Millennium, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

Información de versión

.NET Framework

Compatible con: 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 2.0, 1.0
Vea también