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 и более ранних версий поддерживает строки фиксированной длины, а при чтении в файл дескриптор длины не записывается. Если вы хотите считывать строку без дескриптора, следует передатьTrue
StringIsFixedLength
в параметр , а строка, в которую вы читаете, должна иметь правильную длину.Если считываемая переменная является массивом, длина записи, указанная параметром
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.