FileSystem.FileGetObject(Int32, Object, Int64) 方法

定义

将数据从打开的磁盘文件读入到一个变量中。 相比 FileGetObjectMy 功能可使文件 I/O 操作的效率更高、性能更好。 有关详细信息,请参阅 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)

参数

FileNumber
Int32

必需。 任何有效文件数。

Value
Object

必需。 数据读入到其中的有效变量名称。

RecordNumber
Int64

可选。 读取的开始位置处的记录号(Random 模式文件)或字节数(Binary 模式文件)。

示例

以下示例将记录读取到测试文件中,然后检索它。

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)

注解

FileGetObject如果返回类型ObjectFileGet而不是其他类型(如 IntegerLongShort等),则使用 函数而不是 在编译时避免歧义。

如果要写出类型 VariantFileGetObject 是必需的。 如有疑问,如果将对象用于第二个参数,则始终建议使用 FilePutObjectFileGetObject

FileGetObject 仅在 RandomBinary 模式下有效。

使用 FileGetObject 读取的数据通常使用 FilePutObject编写。

文件中的第一个记录或字节位于位置 1,第二个记录或字节位于位置 2,依序排列。 如果省略 RecordNumberFileGetObject 则读取最后 FileGetObject 一个 或 FilePutObject 函数 (或最后一个函数) 指向的 Seek 记录或字节。

随机模式

对于在模式下 Random 打开的文件,以下规则适用:

  • 如果正在读取的数据长度小于函数 的 FileOpen 子句中指定的RecordLength长度,FileGetObject则读取记录长度边界上的后续记录。 一条记录的末尾和下一条记录的开头之间的空间用文件缓冲区的现有内容填充。 由于无法精确确定填充数据量,因此最好让记录长度与正在读取的数据的长度匹配。

  • 如果要读取的变量是字符串,则默认情况下 FileGetObject 读取包含字符串长度的两字节描述符,然后读取进入变量的数据。 因此,函数 RecordLengthFileOpen 子句指定的记录长度必须至少比字符串的实际长度大两个字节。 Visual Basic 6.0 及更早版本支持固定长度字符串,读取到文件时,不会写入长度描述符。 如果要在没有描述符的情况下读取字符串,则应传递给 TrueStringIsFixedLength 参数,并且读取到的字符串应为正确的长度。

  • 如果读入的变量为数组,则 RecordLength 函数中 FileOpen 参数指定的记录长度必须大于或等于写入数组数据和数组描述符需要的所有字节之和。 描述符指定数组的排名、大小和每个秩的下限。 其长度等于维度数的 2 加 8 倍:2 + 8 * NumberOfDimensions。

    例如,将数组写入磁盘时,以下数组声明需要 218 个字节:

    Dim MyArray(4, 9) As Integer
    

    分发了 218 个字节,如下所示:为描述符分发了 18 个字节 (2 + 8 * 2),为数据分发了 100 个字节 (5 * 10 * 4)。

  • FileGetObject 读取结构的元素,就像单独读取每个元素一样,只不过元素之间没有填充。 在磁盘上,使用 FilePutObject) 编写的用户定义类型 (动态数组的前缀为描述符,其长度等于 2 加 8 倍维度数:2 + 8 * NumberOfDimensions。 函数中的 FileOpen 子句指定的RecordLength记录长度必须大于或等于读取单个元素(包括任何数组及其描述符)所需的所有字节的总和。 类 VBFixedStringAttribute 可以应用于结构中的字符串字段,以指示写入磁盘时字符串的大小。

二进制模式

对于在 Binary 模式下打开的文件,所有 Random 规则都适用,但以下例外:

  • RecordLength函数中的 FileOpen 子句不起作用。 FileGetObject 从磁盘连续读取所有变量,也就是说,记录之间没有填充。

  • 对于结构中数组以外的任何数组, FileGetObject 仅读取数据。 未读取描述符。

FileGetObject 读取不是结构的元素的可变长度字符串,而不期望两字节长度描述符。 读取的字节数等于字符串中已有的字符数。

重要

从文件读取时,不要根据文件扩展名来决定文件的内容。 例如,名为 Form1.vb 的文件可能不是 Visual Basic 源文件。

适用于

另请参阅