FileSystem.FileGetObject(Int32, Object, Int64) 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í.
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
, Long
Short
, , 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 laFileOpen
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 laRecordLength
cláusula de laFileOpen
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 pasarTrue
alStringIsFixedLength
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 laFileOpen
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 conFilePutObject
) 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 laRecordLength
cláusula de laFileOpen
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 laFileOpen
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.