FileGetObject 函数
更新:2007 年 11 月
将数据从打开的磁盘文件读入到变量中。
在文件 I/O 操作中,My 功能具有比 FileGetObject 更高的效率和更好的性能。有关更多信息,请参见 My.Computer.FileSystem 对象。
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 _
)
参数
FileNumber
必需。任何有效文件号。Value
必需。将读入数据的有效变量名。RecordNumber
可选。开始读取处的记录号(Random 模式文件)或字节号(Binary 模式文件)。ArrayIsDynamic
可选。仅应用于写数组时。指定是否将数组视为动态的,如果是的话,是否写入数组说明符,用以描述数组大小和界限。StringIsFixedLength
可选。仅适用于写入字符串时。指定是否为描述长度的字符串写入一个双字节说明符。默认值为 False。
备注
如果返回的是 Object 类型而不是诸如 Integer、Long、Short 之类的另一种类型,则使用 FileGetObject 函数代替 FileGet 可在编译时避免多义性。
如果打算写出 Variant 类型,则需要使用 FileGetObject。当无法确定时,如果要将对象用于第二个参数,则总是建议使用 FilePutObject 和 FileGetObject。
FileGetObject 只在 Random 和 Binary 模式中有效。
用 FileGetObject 读取的数据通常用 FilePutObject 写入。
文件的第一个记录或字节在位置 1,第二个记录或字节在位置 2,依此类推。如果省略 RecordNumber,则 FileGetObject 读取最后一个 FileGetObject 函数或 FilePutObject 函数之后的记录或字节(或由最后一个 Seek 函数指向的记录或字节)。
随机模式
对于以 Random 模式打开的文件,适用下列规则:
如果所读取数据的长度小于 FileOpen 函数的 RecordLength 子句中指定的长度,那么 FileGetObject 沿记录长度边界读取后面的记录。一个记录的结尾与下一个记录开头之间的空白由文件缓冲区内的现有内容填充。因为无法精确地确定填充数据量,所以最好使记录长度与所读取数据的长度匹配。
如果将读入的变量是字符串,则默认情况下 FileGetObject 先读取一个包含字符串长度的双字节说明符,然后读取的数据才是变量本身。因此,由 FileOpen 函数的 RecordLength 子句指定的记录长度必须至少比字符串实际长度多两个字节。Visual Basic 6.0 和较早版本支持固定长度字符串,在读入文件时,不会写入长度说明符。如果想读取字符串而不带说明符,那么应将 True 传递给 StringIsFixedLength 参数,并且要读入的字符串长度应正确。
如果将读入的变量是数组,则可选择读取该数组的大小和维数的说明符。若要读取说明符,请将 ArrayIsDynamic 参数设置为 True。当读取数组时,需要与写入数组的方式匹配。如果写入数组时带说明符,则需要读取说明符。如果不使用说明符,那么将使用传递给 FileGetObject 的数组的大小和界限来确定要读取的内容。
说明符指定数组的秩、大小和每个秩的下限。其长度等于 2 加上 8 与维数的乘积:2 + 8 * NumberOfDimensions。由 FileOpen 函数中的 RecordLength 参数指定的记录长度必须大于或等于写入数组数据和数组说明符所需的全部字节的总和。例如,当向磁盘写入下面的数组时,数组声明需要 118 个字节:
Dim MyArray(4,9) As Integer
118 个字节分配如下:18 (2 + 8 * 2) 个字节用于说明符,100 (5 * 10 * 2) 个字节用于数据。
FileGetObject 像分别读取每个元素一样读取结构的元素,只是元素之间没有填充。在磁盘上,采用用户定义类型的动态数组(用 FilePutObject 写入)以某说明符为前缀,其长度等于 2 加上维数的 8 倍,即 2 + 8 * NumberOfDimensions。由 FileOpen 函数中的 RecordLength 子句指定的记录长度必须大于或等于读取各个元素所需的全部字节的总和,包括所有数组及其说明符。VBFixedStringAttribute 类 可应用于结构中的字符串字段,以指示写入磁盘时字符串的大小。
二进制模式
对于以 Binary 模式打开的文件,除以下之外的所有 Random 规则都适用:
FileOpen 函数中的 RecordLength 子句不会产生任何影响。FileGetObject 连续从磁盘中读取所有变量,也就是说,记录之间没有填充。
对于结构中的数组以外的任何数组,FileGetObject 仅读取数据。不读取说明符。
FileGetObject 读取变长字符串,这些字符串不是结构的元素,不需要双字节长度说明符。读取的字节数等于字符串中已有的字符数。
安全说明: |
---|
从文件读取数据时,请不要根据文件扩展名判断文件的内容。例如,名为 Form1.vb 的文件不一定就是 Visual Basic 源文件。 |
示例
下面的示例将一条记录读入到测试文件中,然后检索这条记录。
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)
智能设备开发人员说明
不支持此函数。
要求
**模块:**FileSystem
**程序集:**Visual Basic 运行库(在 Microsoft.VisualBasic.dll 中)