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

定义

将变量中得数据写入磁盘文件中。 相比 FilePutObjectMy 功能可使文件 I/O 操作的效率更高、性能更好。 有关详细信息,请参阅 FileSystem

public static void FilePutObject (int FileNumber, object Value, long RecordNumber = -1);
static member FilePutObject : int * obj * int64 -> unit
Public Sub FilePutObject (FileNumber As Integer, Value As Object, Optional RecordNumber As Long = -1)

参数

FileNumber
Int32

必需。 任何有效文件数。

Value
Object

必需。 有效变量名,它包含写入磁盘的数据。

RecordNumber
Int64

可选。 开始写入处的记录号(Random 模式文件)或字节号(Binary 模式文件)。

示例

此示例使用 FilePutObject 函数将字符串写入文件。

Sub WriteData()
    Dim text As String = "test"
    FileOpen(1, "test.bin", OpenMode.Binary)
    FilePutObject(1, text)
    FileClose(1)
End Sub

注解

FilePutObject如果传递类型Object而不是另一种类型(如 IntegerLongShort等),则使用 函数而不是 FilePut 来避免编译时出现歧义。

FilePutObject 写入和读取描述对象的描述符。 如果打算写出 Variant 类型, FilePutObject 是必需的。 如有疑问,如果将对象用于第二个参数,建议始终使用 FilePutObjectFileGetObject

FilePutObject 仅在 RandomBinary 模式下有效。

通常使用 FileGetObject 从文件中读取使用 FilePutObject 编写的数据。

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

参数 StringIsFixedLength 控制函数是将字符串解释为可变长度还是固定长度。 FilePutObject 当参数为 True时,不编写长度描述符。 如果将 与 一起使用StringIsFixedLengthFilePutObject = True,则必须对 FileGetObject执行相同的操作,并且还必须确保字符串已初始化为预期的长度。

随机模式

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

  • 如果要写入的数据的长度小于函数的 FileOpen 子句中指定的RecordLength长度,FilePutObject则会在记录长度边界上写入后续记录。 使用文件缓冲区的现有内容填充一条记录末尾和下一条记录开头之间的空格。 由于无法精确确定填充数据量,因此通常最好让记录长度与要写入的数据的长度相匹配。 如果要写入的数据的长度大于函数的 FileOpen 子句中指定的RecordLength长度,则会引发异常。

  • 如果要写入的变量是包含数值类型的对象, FilePutObject 则 写入两个字节来标识 VarType 对象的 ,然后写入变量。 例如,在写入包含整数的对象时, FilePutObject 将写入 6 个字节:两个字节(将对象标识为 VarType(3) (Integer) )和 4 个包含数据的字节。 函数中的 FileOpen 参数指定的RecordLength记录长度必须至少大于存储变量所需的实际字节数的两个字节。

  • 如果要写入的变量是包含字符串的对象, FilePutObject 则编写一个标识 VarType(8) 该对象的 的双字节描述符,一个指示字符串长度的双字节描述符,然后写入字符串数据。 由 函数中的 FileOpen 参数指定的RecordLength记录长度必须至少比字符串的实际长度大四个字节。 如果要放置不带描述符的字符串,则应传递给 TrueStringIsFixedLength 参数,并且读取到的字符串应为正确的长度。

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

二进制模式

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

  • RecordLength函数中的 FileOpen 子句无效。 FilePutObject 将所有变量连续写入磁盘,即不填充记录。

适用于

另请参阅