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 Integer218 байт распределяются следующим образом: 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.