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


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

Определение

Считывает данные из файла открытия диска в переменную. Функция My обеспечивает более высокие показатели производительности и быстродействия в операциях файлового ввода-вывода в сравнении с FileGetObject. Для получения дополнительной информации см. FileSystem.

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

Параметры

FileNumber
Int32

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

Value
Object

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

RecordNumber
Int64

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

Примеры

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

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)

Комментарии

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

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

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

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

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

Случайный режим

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

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

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

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

    Например, для следующего объявления массива требуется 218 байт при записи массива на диск:

    Dim MyArray(4, 9) As Integer
    

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

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

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

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

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

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

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

Важно!

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

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

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