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


Функция FileGetObject

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

Считывает данные из открытого файла на диске в переменную.

Возможность My предоставляет большую производительность и быстродействие в операциях файлового ввода-вывода, чем FileGetObject. Дополнительные сведения смотрите в разделе Объект My.Computer.FileSystem.

Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Object, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Short, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Integer, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Single, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Double, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Decimal, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Byte, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Boolean, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Date, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As System.Array, _
   Optional RecordNumber As Integer = -1, _
   Optional ArrayIsDynamic As Boolean = False _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As String, _
   Optional RecordNumber As Integer = -1, _
   Optional StringIsFixedLength As Boolean = False _
)

Параметры

  • FileNumber
    Обязательно. Любой допустимый номер файла.

  • Value
    Обязательно. Допустимое имя переменной, в которую считываются данные.

  • RecordNumber
    Необязательно. Номер записи (файлы в произвольном режиме — Random) или номер байта (файлы в бинарном режиме — Binary), с которого начинается чтение.

  • ArrayIsDynamic
    Необязательно. Применяется только при записи массива. Указывает, нужно ли обрабатывать массив как динамический, и записывать ли дескриптор массива, описывающий его длину и границы.

  • StringIsFixedLength
    Необязательно. Применяется только при записи строки. Указывает, записывать ли двухбайтовый дескриптор длины строки. Значение по умолчанию — False.

Заметки

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

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

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

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

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

Режим Random

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

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

  • Если переменная считывается как строка, то по умолчанию FileGetObject считывает двухбайтовый дескриптор, содержащий длину строки, а затем считывает данные, сохраняемые в переменной. Поэтому длина записи, указываемая предложением RecordLength функции FileOpen, должна быть как минимум на два байта больше, чем действительная длина строки. В Visual Basic 6.0 и в более ранних версиях поддерживаются строки фиксированной длины, и при считывании в файл дескриптор длины не записывается. Если требуется прочитать строку без дескриптора, то необходимо установить для параметра StringIsFixedLength значение True, а строка, в которую считываются данные, должна быть строкой правильной длины.

  • Если переменная считывается в массив, можно выбрать, читать ли дескриптор с указанием размера и размерности массива. Чтобы записать дескриптор, задайте параметр ArrayIsDynamic равным True. Способ чтения массива должен соответствовать способу его записи. Если он был записан с дескриптором, необходимо прочитать дескриптор. Если дескриптор не используется, то для определения размера считываемых данных используются размер и границы массива, передаваемые в FileGetObject.

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

    Dim MyArray(4,9) As Integer
    

    118 байтов получаются следующим образом: 18 байтов для дескриптора (2 + 8 * 2) и 100 байтов для данных (5 * 10 * 2).

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

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

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

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

  • Для любого массива, кроме массива в структуре, FileGetObject считывает только данные. Дескриптор не читается.

FileGetObject читает строки переменной длины, не являющиеся частью структур, не предполагая наличия двухбайтного дескриптора. Число прочитанных байтов равно числу знаков в строке.

y1swwyc4.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

При считывании из файла нельзя судить о его содержимом только по его расширению. Например, файл с именем Form1.vb может не являться исходным файлом Visual Basic.

Пример

В следующем примере выполняется запись в тестовый файл, а затем соответствующие данные извлекаются обратно.

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)

Примечание для разработчиков приложений для интеллектуальных устройств

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

Требования

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

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

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

См. также

Ссылки

Функция FilePut

Функция FileOpen

Функция Seek

Функция FileGet

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

Чтение из файлов в Visual Basic

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