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


FileSystem.FilePutObject(Int32, Object, Int64) Метод

Определение

Записывает значения переменных в файл на диске. Функция My обеспечивает более высокие показатели производительности и быстродействия в операциях файлового ввода-вывода в сравнении с FilePutObject. Для получения дополнительной информации см. 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 используется вместо 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 режиме , применяются следующие правила:

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

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

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

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

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

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

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

Применяется к

См. также раздел