Функция FileGet
Обновлен: Ноябрь 2007
Считывает данные из открытого файла на диске в переменную.
Возможность My предоставляет большую производительность и быстродействие в операциях файлового ввода-вывода, чем FileGet. Дополнительные сведения смотрите в разделе Объект My.Computer.FileSystem.
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Object, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Short, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Integer, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Single, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Double, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Decimal, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Byte, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Boolean, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Date, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As System.Array, _
Optional RecordNumber As Integer = -1, _
Optional ArrayIsDynamic As Boolean = False _
)
' -or-
Public Overloads Sub FileGet(
ByVal FileNumber As Integer, _
ByRef Value As String, _
Optional RecordNumber As Integer = -1, _
Optional StringIsFixedLength As Boolean = False _
)
Параметры
FileNumber
Обязательно. Любой допустимый номер файла.Value
Обязательно. Допустимое имя переменной, в которую считываются данные.RecordNumber
Необязательно. Номер записи (файлы в режиме Random) или номер байта (файлы в режиме Binary), с которого начинается чтение.ArrayIsDynamic
Необязательно. Применяется только при записи массива. Указывает, нужно ли рассматривать массив как динамический, и необходим ли дескриптор массива, описывающий его длину и границы.StringIsFixedLength
Необязательно. Применяется только при записи строки. Указывает, записать ли двухбайтовый дескриптор длины строки. Значение по умолчанию — False.
Исключения
Тип исключения |
Номер ошибки |
Условие |
---|---|---|
RecordNumber <1 и не равен -1. |
||
FileNumber не существует. |
||
Недопустимый режим файла. |
См. столбец "Номер ошибки", если выполняется обновление приложений Visual Basic 6.0, в которых используется неструктурированная обработка ошибок. (Можно сравнить номер ошибки с Свойство Number (объект Err).) Однако, по возможности, следует заменить такой контроль ошибок на Обзор структурной обработки исключений в Visual Basic.
Заметки
FileGet является допустимым только в режиме Random и Binary.
Данные, прочитанные функцией FileGet, обычно записываются в файл с помощью FilePut.
Первая запись или байт в файле находится в позиции 1, вторая запись или байт — в позиции 2 и т.д. Если пропущен RecordNumber, считывается следующая запись или байт после последней функции FileGet или FilePut (или запись или байт, на которые указывает последняя функция Seek).
Примечание о безопасности. |
---|
При считывании из файла нельзя судить о его содержимом только по его расширению. Например, файл с именем Form1.vb исходным файлом Visual Basic может и не являться. |
Режим Random
Для файлов, открытых в режиме Random, применяются следующие правила:
Если длина считываемых данных меньше длины, указанной в предложении RecordLength функции FileOpen, то FileGet считывает последующие записи по границам записей. Пространство между концом данных одной записи и началом следующей записи заполняется существующим содержимым буфера файла. Поскольку объем используемых для заполнения данных не может быть определен с достаточной точностью, как правило, рекомендуется, чтобы длина записи соответствовала длине читаемых данных.
По умолчанию, если переменная считывается в строку, FileGet считывает двухбайтовый дескриптор, содержащий длину строки, а затем считывает данные, сохраняемые в переменной. Поэтому длина записи, указываемая в предложении RecordLength функции FileOpen, должна быть как минимум на два байта больше, чем действительная длина строки. Visual Basic 6.0 и более ранние версии поддерживают строки фиксированной длины; при записи в файл дескриптор длины не записывается. Если требуется прочитать строку без дескриптора, то необходимо установить для параметра StringIsFixedLength значение True, а строка, в которую считываются данные, должна быть строкой правильной длины.
Если считываемая переменная — это массив, можно выбрать, читать ли дескриптор размера и размерность массива. Чтобы записать дескриптор, задайте параметр ArrayIsDynamic равным True. Способ чтения массива должен соответствовать способу его записи. Если он был записан с дескриптором, необходимо прочитать дескриптор. Если дескриптор не используется, то для определения размера считываемых данных используются размер и границы массива, передаваемые в FileGet
Дескриптор определяет ранг массива, его размер и нижнюю границу для каждого ранга. Его длина равна 2 плюс 8, умноженное на число измерений: (2 + 8 * NumberOfDimensions). Длина записи, заданная в параметре RecordLength функции FileOpen, должна быть больше или равна суммарному количеству байтов, необходимых для записи данных массива и его дескриптора. Например, для записи на диск объявляемого далее массива требуется 218 байтов.
Dim MyArray(4,9) As Integer
218 Байт распределяются следующим образом:
18 байт для дескриптора: (2 + 8 * 2)
200 байт для данных: (5 * 10 * 4).
Если считываемая переменная относится к какому-либо другому типу (не является строкой переменной длины или объектом), FileGet читает только данные переменной. Длина записи, заданная предложением RecordLength функции FileOpen, должна быть не меньше длины считываемых данных.
FileGet считывает элементы структуры, как если бы каждый элемент считывался отдельно, с тем исключением, что между элементами отсутствуют данные-заполнители. На диске динамический массив определенного пользователем типа (записанный с помощью функции FilePut) начинается с дескриптора, длина которого равна 2 плюс 8, умноженное на размерность: (2 + 8 * NumberOfDimensions). Длина записи, заданная предложением RecordLength функции FileOpen, должна быть больше или равна суммарному количеству байтов, необходимых для чтения отдельных элементов. Сюда входят все массивы и их дескрипторы. Чтобы указать размер строки при записи на диск, к строковым полям может быть применен атрибут VBFixedString.
Двоичный режим
Для файлов, открытых в режиме Binary, применима большая часть правил режима Random, с некоторыми исключениями. Следующие правила для файлов, открытых в режиме Binary, отличаются от правил для режима Random :
Предложение RecordLength в функции FileOpen не оказывает влияния. Функция FileGet считывает все переменные с диска подряд, без учета заполнения между записями.
Для любого массива, кроме массива в структуре, FileGet считывает только данные. Дескриптор не читается.
FileGet читает строки переменной длины, не являющиеся частью структур, не предполагая наличия двухбайтного дескриптора. Число прочитанных байтов равно числу знаков в строке.
Примечание о безопасности. Чтение файла с помощью функции FileGet требует доступа Read из перечисления FileIOPermissionAccess.
Примечание для разработчиков приложений для интеллектуальных устройств
Данная функция не поддерживается.
Требования
Пространство имен:Microsoft.VisualBasic
**Модуль:**FileSystem
**Сборка:**Visual Basic (библиотека времени выполнения, в Microsoft.VisualBasic.dll)