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 Integer
    

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

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

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