FileGetObject (Función)

Actualización: noviembre 2007

Lee datos de un archivo de disco abierto y los coloca en una variable.

La característica My proporciona mayor productividad y rendimiento en las operaciones de E/S de archivo que si se utiliza FileGetObject. Para obtener más información, vea My.Computer.FileSystem (Objeto).

Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Object, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Short, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Integer, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Single, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Double, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Decimal, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Byte, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Boolean, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Date, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As System.Array, _
   Optional RecordNumber As Integer = -1, _
   Optional ArrayIsDynamic As Boolean = False _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As String, _
   Optional RecordNumber As Integer = -1, _
   Optional StringIsFixedLength As Boolean = False _
)

Parámetros

  • FileNumber
    Obligatorio. Cualquier número de archivo válido.

  • Value
    Obligatorio. Nombre de variable válido en el que se leen los datos.

  • RecordNumber
    Opcional. Número de registro (archivos en modo Random) o número de byte (archivos en modo Binary) desde el que comienza la lectura.

  • ArrayIsDynamic
    Opcional. Sólo se aplica cuando se escribe una matriz. Especifica si se ha de tratar a la matriz como dinámica y si se ha de escribir un descriptor de matriz para el tamaño y los límites de la matriz.

  • StringIsFixedLength
    Opcional. Sólo se aplica cuando se escribe una cadena. Especifica si se escribe un descriptor de dos bytes para la cadena que describe la longitud. El valor predeterminado es False.

Comentarios

La función FileGetObject se utiliza en lugar de FileGet para evitar ambigüedades en tiempo de compilación si se pasa el tipo Object en vez de otro tipo, como Integer, Long, Short, etc.

Si desea escribir el tipo Variant, se requiere FileGetObject. En caso de duda, si utiliza un objeto para el segundo parámetro, se recomienda siempre que utilice FilePutObject y FileGetObject.

FileGetObject sólo es válido en los modos Random y Binary.

Los datos leídos con FileGetObject normalmente se escriben con FilePutObject.

El primer registro o byte de un archivo se encuentra en la posición 1, el segundo en la posición 2 y así sucesivamente. Si omite RecordNumber, FileGetObject lee el registro o byte que siga inmediatamente después de la última función FileGetObject o FilePutObject (o al que señale la última función Seek).

Modo aleatorio

Con los archivos abiertos en modo Random, se aplican las siguientes reglas:

  • Si la longitud de los datos que se estén leyendo es menor que la especificada en la cláusula RecordLength de la función FileOpen, FileGetObject leerá los registros posteriores en los límites de longitud de registro. El espacio comprendido entre el final de un registro y el principio del siguiente se rellena con el contenido existente del búfer del archivo. Como no se puede determinar con exactitud la cantidad de datos de relleno, se recomienda que la longitud del registro coincida con la de los datos que se estén leyendo.

  • Si la variable que se está leyendo es una cadena, FileGetObject de forma predeterminada, leerá primero un descriptor de dos bytes con la longitud de la cadena y, a continuación, la información destinada a la variable. Por tanto, la longitud de registro especificada por la cláusula RecordLength de la función FileOpen ha de ser, como mínimo, dos bytes mayor que la longitud real de la cadena. Visual Basic 6.0 y otras versiones anteriores admiten cadenas de longitud fija; cuando se lee un archivo, no se escribe el descriptor de longitud. Si desea leer una cadena sin el descriptor, debería pasar True al parámetro StringIsFixedLength y la cadena que lea debería tener la longitud correcta.

  • Si la variable que se esté leyendo es una matriz, puede elegir leer un descriptor con el tamaño y dimensiones de la matriz. Para leerlo, establezca el parámetro ArrayIsDynamic en True. Al leer la matriz, deberá hacer que coincida con la forma en que se escribió la matriz. Si fue escrita con el descriptor, deberá leer el descriptor. Si no se utiliza el descriptor, se utilizan el tamaño y los límites de la matriz pasados a FileGetObject para determinar qué es lo que se debe leer.

    El descriptor especifica tanto el rango de la matriz, como el tamaño y los límites inferiores de cada rango. Su longitud es igual a 2 más 8 veces el número de dimensiones: 2 + 8 * NumberOfDimensions. La longitud de registro especificada por el parámetro RecordLength de la función FileOpen debe ser mayor o igual que la suma de todos los bytes necesarios para escribir los datos y el descriptor de la matriz. Por ejemplo, la siguiente declaración de matriz requiere 118 bytes cuando la matriz se escribe en disco:

    Dim MyArray(4,9) As Integer
    

    Los 118 bytes se distribuyen de la siguiente forma: 18 bytes para el descriptor (2 + 8 * 2) y 100 bytes para los datos (5 * 10 * 2).

  • FileGetObject lee elementos de estructuras como si cada uno de ellos se estuviera leyendo por separado, con la excepción de que no existe relleno entre ellos. En disco, las matrices dinámicas de tipos definidos por el usuario (escritas con FilePutObject) vienen prefijadas con un descriptor cuya longitud es igual a 2 más 8 veces el número de dimensiones: 2 + 8 * NumberOfDimensions. La longitud del registro especificada por la cláusula RecordLength de la función FileOpen debe ser mayor o igual que la suma de todos los bytes necesarios para leer de forma individual cada uno de los elementos, incluidas las matrices y sus descriptores. VBFixedStringAttribute (Clase) puede aplicarse a campos de cadena de las estructuras para indicar el tamaño de la cadena cuando se escribe en disco.

Modo binario

Para los archivos abiertos en modo Binary, se aplican todas las reglas del modo Random, con estas excepciones.

  • La cláusula RecordLength de la función FileOpen no tiene ningún efecto. FileGetObject lee todas las variables desde el disco de forma contigua, es decir, sin relleno entre los registros.

  • En el caso de matrices no asociadas a estructuras, FileGetObject leerá únicamente los datos. No se leerá ningún descriptor.

FileGetObject lee las cadenas de longitud variable que no sean elementos de estructuras sin esperar el descriptor de longitud de dos bytes. El número de bytes leídos es igual al número de caracteres existentes en la cadena.

Nota de seguridad:

Cuando se leen archivos, no deben tomarse decisiones acerca del contenido de un archivo basándose en la extensión del nombre de archivo. Por ejemplo, un archivo denominado Form1.vb puede no ser un archivo de código fuente de Visual Basic.

Ejemplo

En el ejemplo siguiente, se lee un registro en un archivo de prueba y después se recupera.

Dim c As Object = "test"
FileSystem.FileOpen(1, "test.dat", OpenMode.Binary)
FileSystem.FilePutObject(1, "ABCDEF")
FileSystem.Seek(1, 1)
FileSystem.FileGetObject(1, c)
MsgBox(c)
FileSystem.FileClose(1)

Notas para desarrolladores de dispositivos inteligentes

Esta función no está admitida.

Requisitos

Espacio de nombres:Microsoft.VisualBasic

**Módulo:**FileSystem

**Ensamblado:**Visual Basic Runtime Library (en Microsoft.VisualBasic.dll)

Vea también

Referencia

FilePut (Función)

FileOpen (Función)

Seek (Función)

FileGet (Función)

Otros recursos

Leer archivos en Visual Basic

Escribir en archivos en Visual Basic