FileSystem.FileGetObject(Int32, Object, Int64) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
将数据从打开的磁盘文件读入到一个变量中。 相比 FileGetObject
,My
功能可使文件 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
如果返回类型Object
FileGet
而不是其他类型(如 Integer
、Long
、 Short
等),则使用 函数而不是 在编译时避免歧义。
如果要写出类型 Variant
, FileGetObject
是必需的。 如有疑问,如果将对象用于第二个参数,则始终建议使用 FilePutObject
和 FileGetObject
。
FileGetObject
仅在 Random
和 Binary
模式下有效。
使用 FileGetObject
读取的数据通常使用 FilePutObject
编写。
文件中的第一个记录或字节位于位置 1,第二个记录或字节位于位置 2,依序排列。 如果省略 RecordNumber
, FileGetObject
则读取最后 FileGetObject
一个 或 FilePutObject
函数 (或最后一个函数) 指向的 Seek
记录或字节。
随机模式
对于在模式下 Random
打开的文件,以下规则适用:
如果正在读取的数据长度小于函数 的
FileOpen
子句中指定的RecordLength
长度,FileGetObject
则读取记录长度边界上的后续记录。 一条记录的末尾和下一条记录的开头之间的空间用文件缓冲区的现有内容填充。 由于无法精确确定填充数据量,因此最好让记录长度与正在读取的数据的长度匹配。如果要读取的变量是字符串,则默认情况下
FileGetObject
读取包含字符串长度的两字节描述符,然后读取进入变量的数据。 因此,函数RecordLength
的FileOpen
子句指定的记录长度必须至少比字符串的实际长度大两个字节。 Visual Basic 6.0 及更早版本支持固定长度字符串,读取到文件时,不会写入长度描述符。 如果要在没有描述符的情况下读取字符串,则应传递给True
StringIsFixedLength
参数,并且读取到的字符串应为正确的长度。如果读入的变量为数组,则
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 源文件。