Поделиться через


Функция FilePutObject

Обновлен: Ноябрь 2007

Записывает значения переменных в файл на диске.

Функция 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.

Заметки

Функция FilePutObject используется вместо FilePut, чтобы избежать неоднозначности во время компиляции, если передается тип Object вместо другого типа, например, Integer, Long, Short и т. д.

Функция FilePutObject записывает и читает дескрипторы, описывающие объект. Если планируется запись данных типа Variant, то необходимо использовать функцию FilePutObject. В случае возникновения сомнений при использовании объекта для второго параметра, всегда рекомендуется использовать FilePutObject и FileGetObject.

FilePutObject является допустимым только в режиме Random и Binary.

Данные, записанные с помощью процедуры FilePutObject, обычно читаются из файла с помощью процедуры FileGetObject.

Первая запись или байт в файле находится в позиции 1, вторая запись или байт — в позиции 2 и т. д. Если пропущен параметр RecordNumber, FilePutObject записывает следующую запись или байт после последней функции FileGetObject или FilePutObject (или запись или байт, на который указывает последняя функция Seek).

Аргумент StringIsFixedLength указывает функции как интерпретировать строки: в виде переменной или фиксированной длины. Функция FilePutObject не записывает дескриптор длины, когда аргумент принимает значение True. При использовании StringIsFixedLength = True с FilePutObject необходимо сделать то же самое с FileGetObject и убедиться, что строка инициализируется для ожидаемой длины.

Режим Random

Для файлов, открытых в режиме Random, применяются следующие правила:

  • Если длина записываемых данных меньше длины, указанной в выражении RecordLength функции FileOpen, границы последующих записей, выполняемых функцией FilePutObject, определяются данным параметром. Пространство между концом данных одной записи и началом следующей записи заполняется существующим содержимым буфера файла. Поскольку объем используемых для этого данных не может быть точно определен, рекомендуется, чтобы длина записи соответствовала длине вводимых в нее данных. Если длина записываемых данных больше длины записи, указанной в выражении RecordLength функции FileOpen, возникнет исключение.

  • Если записываемая переменная является объектом, содержащим числовой тип, FilePutObject записывает двухбайтовый идентификатор переменной VarType объекта, а затем записывает переменную. Например, если записывается объект, содержащий целое число, функция FilePutObject записывает шесть байтов: два байта, идентифицирующие объект как VarType(3) (Integer), и четыре байта, содержащие данные. Длина записи, указанная в параметре RecordLength функции FileOpen, должна быть как минимум на два байта больше, чем действительное число байтов, необходимых для хранения переменной.

  • Если записываемая переменная является объектом, содержащим строку, функция FilePutObject записывает двухбайтовый идентификатор объекта VarType(8), двухбайтовый дескриптор, задающий длину строки, а затем сами данные. Поэтому длина строки, указанная в параметре RecordLength функции FileOpen, должна быть как минимум на четыре байта больше, чем действительная длина строки. Если требуется прочитать строку без дескриптора, необходимо установить значение True для параметра StringIsFixedLength, а строка, в которую считываются данные, должна быть строкой правильной длины.

  • Если записываемая переменная является массивом, можно выбрать, записывать ли дескриптор с указанием размера и размерности массива. В Visual Basic версии 6.0 и более ранних версий дескриптор записывается для динамического массива и не записывается для массива фиксированной длины; Visual Basic по умолчанию не записывает дескриптор. Чтобы записать дескриптор, присвоить параметру ArrayIsDynamic значение True. Способ записи массива должен соответствовать способу, который будет использоваться при чтении массива. Если массив будет читаться с дескриптором, записывать его тоже необходимо с дескриптором. Дескриптор определяет ранг массива, его размер и нижнюю границу для каждого ранга. Его длина равна 2 плюс 8, умноженное на число измерений: (2 + 8 * NumberOfDimensions). Длина записи, заданная в выражении RecordLength функции FileOpen, должна быть больше или равна суммарному количеству байтов, необходимых для записи данных массива и его дескриптора.

Двоичный режим

К файлам, открытым в двоичном режиме (Binary), применяются те же правила, что и к файлам, открытым в произвольном режиме (Random), за следующим исключением.

  • Условие RecordLength в функции FileOpen не обрабатывается. Функция FilePutObject записывает все переменные на диск рядом, без заполнения между записями.

Пример

В этом примере функция FilePutObject используется для записи строки в файл.

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

Примечание для разработчиков Smart Device

Данная функция не поддерживается.

Требования

Пространство имен:Microsoft.VisualBasic

**Модуль:**FileSystem

**Сборка:**Visual Basic (библиотека времени выполнения, в Microsoft.VisualBasic.dll)

См. также

Ссылки

Функция FileGet

Функция FileOpen

Функция Seek

Функция FilePut

Объект My.Computer.FileSystem

Другие ресурсы

Запись в файлы в Visual Basic