Compartir vía


FileSystem.FileGetObject(Int32, Object, Int64) Método

Definición

Lee datos de un archivo de disco abierto en una variable. La característica My proporciona una mayor productividad y rendimiento en las operaciones de E/S de archivo que FileGetObject. Para obtener más información, vea FileSystem.

public static void FileGetObject (int FileNumber, ref object Value, long RecordNumber = -1);
static member FileGetObject : int * obj * int64 -> unit
Public Sub FileGetObject (FileNumber As Integer, ByRef Value As Object, Optional RecordNumber As Long = -1)

Parámetros

FileNumber
Int32

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

Value
Object

Obligatorio. Nombre de variable válido en la que se leen los datos.

RecordNumber
Int64

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

Ejemplos

En el ejemplo siguiente se lee un registro en un archivo de prueba y, a continuación, 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)

Comentarios

La FileGetObject función se usa en lugar de FileGet para evitar ambigüedades en tiempo de compilación si se devuelve el tipo Object en lugar de otro tipo, como Integer, LongShort, , etc.

Si piensa escribir el Variant tipo, FileGetObject es necesario. En caso de duda, si usa un objeto para el segundo parámetro, siempre se recomienda usar FilePutObject y FileGetObject.

FileGetObject solo es válido en Random modo y Binary .

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

El primer registro o byte de un archivo está en la posición 1, el segundo registro o byte está en la posición 2, etc. Si omite RecordNumber, FileGetObject lee el registro o byte después de la última FileGetObject función o FilePutObject (o apunta a por la última Seek función).

Modo aleatorio

En el caso de los archivos abiertos en Random modo , se aplican las reglas siguientes:

  • Si la longitud de los datos que se leen es menor que la longitud especificada en la RecordLength cláusula de la FileOpen función, FileGetObject lee los registros posteriores en los límites de longitud del registro. El espacio entre el final de un registro y el principio del siguiente registro se rellena con el contenido existente del búfer de archivos. Dado que la cantidad de datos de relleno no se puede determinar con precisión, es recomendable que la longitud del registro coincida con la longitud de los datos que se van a leer.

  • Si la variable en la que se lee es una cadena, de forma predeterminada FileGetObject lee un descriptor de dos bytes que contiene la longitud de la cadena y, a continuación, lee los datos que entran en la variable. Por lo tanto, la longitud del registro especificada por la RecordLength cláusula de la FileOpen función debe ser al menos dos bytes mayores que la longitud real de la cadena. Visual Basic 6.0 y versiones anteriores admiten cadenas de longitud fija y cuando se leen en un archivo, el descriptor de longitud no se escribe. Si desea leer una cadena sin el descriptor, debe pasar True al StringIsFixedLength parámetro y la cadena en la que lee debe ser la longitud correcta.

  • Si la variable en la que se lee es una matriz, la longitud del registro especificada por el RecordLength parámetro de la FileOpen función debe ser mayor o igual que la suma de todos los bytes necesarios para escribir los datos de la matriz y el descriptor de matriz. El descriptor especifica la clasificación de la matriz, el tamaño y los límites inferiores para cada clasificación. Su longitud es igual a 2 más 8 veces el número de dimensiones: 2 + 8 * NumberOfDimensions.

    Por ejemplo, la siguiente declaración de matriz requiere 218 bytes cuando la matriz se escribe en el disco:

    Dim MyArray(4, 9) As Integer
    

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

  • FileGetObject lee elementos de estructuras como si cada uno se estuviera leyendo individualmente, salvo que no hay relleno entre elementos. En el disco, una matriz dinámica de un tipo definido por el usuario (escrita con FilePutObject) tiene como prefijo 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 RecordLength cláusula de la FileOpen función debe ser mayor o igual que la suma de todos los bytes necesarios para leer los elementos individuales, incluidas las matrices y sus descriptores. La VBFixedStringAttribute clase se puede aplicar a los campos de cadena de las estructuras para indicar el tamaño de la cadena cuando se escribe en el disco.

Modo binario

En el caso de los archivos abiertos en Binary modo , se aplican todas las Random reglas, con estas excepciones:

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

  • Para cualquier matriz distinta de una matriz de una estructura, FileGetObject solo lee los datos. No se lee ningún descriptor.

FileGetObject lee cadenas de longitud variable que no son 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 que ya están en la cadena.

Importante

Al leer archivos, no tome decisiones sobre el contenido de un archivo basado en la extensión de nombre de archivo. Por ejemplo, es posible que un archivo denominado Form1.vb no sea un archivo de código fuente de Visual Basic.

Se aplica a

Consulte también