Поделиться через


Функция 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.

Исключения

Тип исключения

Номер ошибки

Условие

ArgumentException

63

RecordNumber <1 и не равен -1.

IOException

52

FileNumber не существует.

IOException

54

Недопустимый режим файла.

См. столбец "Номер ошибки", если выполняется обновление приложений Visual Basic 6.0, в которых используется неструктурированная обработка ошибок. (Можно сравнить номер ошибки с Свойство Number (объект Err).) Однако, по возможности, следует заменить такой контроль ошибок на Обзор структурной обработки исключений в Visual Basic.

Заметки

FileGet является допустимым только в режиме Random и Binary.

Данные, прочитанные функцией FileGet, обычно записываются в файл с помощью FilePut.

Первая запись или байт в файле находится в позиции 1, вторая запись или байт — в позиции 2 и т.д. Если пропущен RecordNumber, считывается следующая запись или байт после последней функции FileGet или FilePut (или запись или байт, на которые указывает последняя функция Seek).

3acfheek.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

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

    3acfheek.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

    Чтение файла с помощью функции FileGet требует доступа Read из перечисления FileIOPermissionAccess.

Примечание для разработчиков приложений для интеллектуальных устройств

Данная функция не поддерживается.

Требования

Пространство имен:Microsoft.VisualBasic

**Модуль:**FileSystem

**Сборка:**Visual Basic (библиотека времени выполнения, в Microsoft.VisualBasic.dll)

См. также

Ссылки

Функция FileOpen

Функция FilePut

Функция Seek

Функция FileGetObject

Другие ресурсы

Чтение из файлов в Visual Basic

Запись в файлы в Visual Basic