FileSystem.FileGetObject(Int32, Object, Int64) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Считывает данные из открытого файла диска в переменную. Эта My функция обеспечивает лучшую производительность и производительность операций ввода-вывода файлов, чем FileGetObject. Дополнительные сведения см. в разделе FileSystem.
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The target object type could not be statically analyzed and may be trimmed")]
public static void FileGetObject(int FileNumber, ref object Value, long RecordNumber = -1);
public static void FileGetObject(int FileNumber, ref object Value, long RecordNumber = -1);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The target object type could not be statically analyzed and may be trimmed")>]
static member FileGetObject : int * obj * int64 -> unit
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
Optional. Число записей (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, LongShortи т. д.
Если вы планируете выписать Variant тип, FileGetObject требуется. Если вы используете объект для второго параметра, всегда рекомендуется использовать FilePutObject и FileGetObject.
FileGetObjectдопустимо только в режиме и Random в Binary режиме.
Чтение данных с FileGetObject помощью обычно записывается с FilePutObjectпомощью .
Первая запись или байт в файле находятся на позиции 1, вторая запись или байт — на позиции 2 и т. д. Если не указаноRecordNumber, FileGetObject считывает запись или байт после последней или FileGetObject функции (или указывает на последнюю FilePutObjectSeek функцию).
Случайный режим
Для файлов, открытых в 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 можно применить к строковым полям в структурах, чтобы указать размер строки при записи на диск.
Двоичный режим
Для файлов, открытых в Binary режиме, применяются все Random правила с этими исключениями:
Предложение
RecordLengthвFileOpenфункции не действует.FileGetObjectсчитывает все переменные из диска непрерывно, т. е. без заполнения между записями.Для любого массива, отличного от массива в структуре,
FileGetObjectсчитывает только данные. Дескриптор не считывается.
FileGetObject считывает строки переменной длины, которые не являются элементами структур, не ожидая дескриптора двухбайтовой длины. Число считываемых байтов равно числу символов, уже находящихся в строке.
Important
При чтении из файлов не следует принимать решения о содержимом файла на основе расширения имени файла. Например, файл с именем Form1.vb может не быть исходным файлом Visual Basic.