FilePutObject 函数

更新:2007 年 11 月

将数据从变量写入磁盘文件。

在文件 I/O 操作中,My 功能具有比 FilePutObject 更高的效率和更好的性能。有关更多信息,请参见 My.Computer.FileSystem 对象

Public Sub FilePutObject( _
      FileNumber As Integer, _
      Value As Object, _
      RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
      FileNumber As Integer, _
      Value As Short, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
      FileNumber As Integer, _
      Value As Integer, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
      FileNumber As Integer, _
      Value As Single, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
      FileNumber As Integer, _
      Value As Double, _
      RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
      FileNumber As Integer, _
      Value As Decimal, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
      FileNumber As Integer, _
      Value As Byte, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
      FileNumber As Integer, _
      Value As Boolean, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
      FileNumber As Integer, _
      Value As Date, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FilePutObject( _
      FileNumber As Integer, _
      Value As System.Array, _
   Optional RecordNumber As Integer = -1, _
   Optional ArrayIsDynamic As Boolean = False _
)
' -or-
Overloads Public Sub FilePutObject( _
      FileNumber As Integer, _
      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 之类的另一种类型,则使用 FilePutObject 函数代替 FilePut 可在编译时避免多义性。

FilePutObject 写入和读取描述对象的说明符。如果打算写出 Variant 类型,则需要使用 FilePutObject。当无法确定时,如果要将对象用于第二个参数,则建议总是使用 FilePutObject 和 FileGetObject。

FilePutObject 只在 Random 和 Binary 模式中有效。

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

文件的第一个记录或字节在位置 1,第二个记录或字节在位置 2,依此类推。如果省略 RecordNumber,则 FilePutObject 写入最后一个 FileGetObject 函数或 FilePutObject 函数之后的下一个记录或字节(或由最后一个 Seek 函数指向的记录或字节)。

StringIsFixedLength 参数控制函数是将字符串解释为变长还是固定长度。当参数为 True 时,FilePutObject 不写入长度描述符。如果将 StringIsFixedLength = True 与 FilePutObject 一起使用,则同样需要将其与 FileGetObject 一起使用,并且还必须确定字符串已初始化为需要的长度。

随机模式

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

  • 如果写入的数据长度小于 FileOpen 函数的 RecordLength 子句中指定的长度,则 FilePutObject 将在记录长度边界的范围内写入后面的记录。一个记录的结尾与下一个记录开头之间的空白由文件缓冲区内的现有内容填充。因为无法精确地确定填充数据量,所以通常最好使记录长度与要写入数据的长度匹配。如果要写入数据的长度大于 FileOpen 函数的 RecordLength 子句中指定的长度,则会发生异常。

  • 如果写入的变量是包含 Numeric 类型的对象,则 FilePutObject 将写入两个字节来标识对象的 VarType,然后再写入该变量。例如,当写入包含整数的对象时,FilePutObject 将写入六个字节:两个字节将该对象标识为 VarType(3) (Integer),四个字节包含数据。由 FileOpen 函数中的 RecordLength 参数指定的记录长度必须比存储变量所需的实际字节数至少多两个字节。

  • 如果所写入变量是包含字符串的对象,则 FilePutObject 先写入一个双字节说明符标识该对象的 VarType(8),再写入一个双字节说明符指示字符串长度,然后写入字符串数据。由 FileOpen 函数中的 RecordLength 参数指定的记录长度必须至少比字符串实际长度多四个字节。如果想放置字符串而不带说明符,那么应向 StringIsFixedLength 参数传递 True,并且要读入的字符串长度应正确。

  • 如果所写入的变量是数组,则可选择写入该数组的大小和维数的说明符。对于动态数组,Visual Basic 6.0 和较早版本会写入文件说明符,但对于固定大小的数组则不写入;而 Visual Basic 默认不写入说明符。若要写入说明符,请将 ArrayIsDynamic 参数设置为 True。当写入数组时,需要与读取数组的方式匹配;如果读取时带说明符,则需要写入说明符。说明符指定数组的秩、大小和每个秩的下限。其长度等于 2 加上 8 与维数的乘积:(2 + 8 * NumberOfDimensions)。由 FileOpen 函数中的 RecordLength 子句指定的记录长度必须大于或等于写入数组数据和数组说明符所需的全部字节数的总和。

二进制模式

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

  • FileOpen 函数中的 RecordLength 子句不会产生任何影响。FilePutObject 连续向磁盘中写入所有变量,也就是说,记录之间没有空白。

示例

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

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

智能设备开发人员说明

不支持此函数。

要求

命名空间:Microsoft.VisualBasic

**模块:**FileSystem

**程序集:**Visual Basic 运行库(在 Microsoft.VisualBasic.dll 中)

请参见

参考

FileGet 函数

FileOpen 函数

Seek 函数

FilePut 函数

My.Computer.FileSystem 对象

其他资源

写入文件 (Visual Basic)