FileSystem.FileGetObject(Int32, Object, Int64) Method
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Reads data from an open disk file into a variable. The My
feature gives you better productivity and performance in file I/O operations than FileGetObject
. For more information, see 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)
Parameters
- FileNumber
- Int32
Required. Any valid file number.
- Value
- Object
Required. Valid variable name into which data is read.
- RecordNumber
- Int64
Optional. Record number (Random
mode files) or byte number (Binary
mode files) at which reading starts.
Examples
The following example reads a record into a test file and then retrieves it.
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)
Remarks
The FileGetObject
function is used instead of FileGet
to avoid ambiguities at compile time if type Object
is returned instead of another type, such as Integer
, Long
, Short
, and so forth.
If you intend to write out the Variant
type, FileGetObject
is required. When in doubt, if you are using an object for the second parameter, it is always suggested that you use FilePutObject
and FileGetObject
.
FileGetObject
is valid only in Random
and Binary
mode.
Data read with FileGetObject
is usually written with FilePutObject
.
The first record or byte in a file is at position 1, the second record or byte is at position 2, and so on. If you omit RecordNumber
, FileGetObject
reads the record or byte after the last FileGetObject
or FilePutObject
function (or pointed to by the last Seek
function).
Random Mode
For files opened in Random
mode, the following rules apply:
If the length of the data being read is less than the length specified in the
RecordLength
clause of theFileOpen
function,FileGetObject
reads subsequent records on record-length boundaries. The space between the end of one record and the beginning of the next record is padded with the existing contents of the file buffer. Because the amount of padding data cannot be precisely determined, it is a good idea to have the record length match the length of the data being read.If the variable being read into is a string, by default
FileGetObject
reads a two-byte descriptor containing the string length and then reads the data that goes into the variable. Therefore, the record length specified by theRecordLength
clause of theFileOpen
function must be at least two bytes greater than the actual length of the string. Visual Basic 6.0 and earlier versions support fixed-length strings and when read to a file, the length descriptor is not written. If you want to read a string without the descriptor, you should passTrue
to theStringIsFixedLength
parameter, and the string you read into should be the correct length.If the variable being read into is an array, then the record length specified by the
RecordLength
parameter in theFileOpen
function must be greater than or equal to the sum of all the bytes required to write the array data and the array descriptor. The descriptor specifies the rank of the array, the size, and the lower bounds for each rank. Its length equals 2 plus 8 times the number of dimensions: 2 + 8 * NumberOfDimensions.For example, the following array declaration requires 218 bytes when the array is written to disk:
Dim MyArray(4, 9) As Integer
The 218 bytes are distributed as follows: 18 bytes for the descriptor (2 + 8 * 2), and 100 bytes for the data (5 * 10 * 4).
FileGetObject
reads elements of structures as if each were being read individually, except that there is no padding between elements. On disk, a dynamic array in a user-defined type (written withFilePutObject
) is prefixed by a descriptor whose length equals 2 plus 8 times the number of dimensions: 2 + 8 * NumberOfDimensions. The record length specified by theRecordLength
clause in theFileOpen
function must be greater than or equal to the sum of all the bytes required to read the individual elements, including any arrays and their descriptors. The VBFixedStringAttribute class can be applied to string fields in the structures to indicate the size of string when written to disk.
Binary Mode
For files opened in Binary
mode, all of the Random
rules apply, with these exceptions:
The
RecordLength
clause in theFileOpen
function has no effect.FileGetObject
reads all variables from disk contiguously, that is, with no padding between records.For any array other than an array in a structure,
FileGetObject
reads only the data. No descriptor is read.
FileGetObject
reads variable-length strings that are not elements of structures without expecting the two-byte length descriptor. The number of bytes read equals the number of characters already in the string.
Important
When reading from files, do not make decisions about the contents of a file based on the file name extension. For example, a file named Form1.vb may not be a Visual Basic source file.