Compartilhar via


FileSystem.FileGetObject(Int32, Object, Int64) Método

Definição

Lê dados de um arquivo aberto de disco em uma variável. O recurso My oferece melhor produtividade e desempenho em operações de E/S do arquivo do que FileGetObject. Para obter mais informações, consulte 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)

Parâmetros

FileNumber
Int32

Obrigatórios. Qualquer número de arquivo válido.

Value
Object

Obrigatórios. Nome de variável válido no qual os dados são lidos.

RecordNumber
Int64

Opcional. Registre o número (arquivos de modo Random) ou número de byte (arquivos de modo Binary) no qual a leitura começa.

Exemplos

O exemplo a seguir lê um registro em um arquivo de teste e o recupera.

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)

Comentários

A FileGetObject função é usada em vez de FileGet para evitar ambiguidades em tempo de compilação se o tipo Object for retornado em vez de outro tipo, como Integer, Long, Shorte assim por diante.

Se você pretende gravar o Variant tipo, FileGetObject é necessário. Em caso de dúvida, se você estiver usando um objeto para o segundo parâmetro, sempre será sugerido que você use FilePutObject e FileGetObject.

FileGetObject é válido somente no Random modo e Binary .

Os dados lidos com FileGetObject geralmente são gravados com FilePutObject.

O primeiro registro ou byte em um arquivo está na posição 1, o segundo registro ou byte está na posição 2 e assim por diante. Se você omitir RecordNumber, lerá o registro ou byte após a última FileGetObject função ou FilePutObject (ou apontado pela última SeekFileGetObject função).

Modo Aleatório

Para arquivos abertos no Random modo , as seguintes regras se aplicam:

  • Se o comprimento dos dados que estão sendo lidos for menor que o comprimento especificado na RecordLength cláusula da FileOpen função, FileGetObject lerá os registros subsequentes nos limites de comprimento do registro. O espaço entre o final de um registro e o início do próximo registro é preenchido com o conteúdo existente do buffer de arquivos. Como a quantidade de dados de preenchimento não pode ser determinada com precisão, é uma boa ideia fazer com que o comprimento do registro corresponda ao comprimento dos dados que estão sendo lidos.

  • Se a variável que está sendo lida for uma cadeia de caracteres, por padrão, lerá FileGetObject um descritor de dois bytes que contém o comprimento da cadeia de caracteres e lerá os dados que entram na variável. Portanto, o comprimento do registro especificado pela RecordLength cláusula da FileOpen função deve ser pelo menos dois bytes maior que o comprimento real da cadeia de caracteres. O Visual Basic 6.0 e versões anteriores dão suporte a cadeias de caracteres de comprimento fixo e, quando lido em um arquivo, o descritor de comprimento não é gravado. Se você quiser ler uma cadeia de caracteres sem o descritor, deverá passar True para o StringIsFixedLength parâmetro e a cadeia de caracteres em que você leu deve ter o comprimento correto.

  • Se a variável que está sendo lida for uma matriz, o comprimento do registro especificado pelo RecordLength parâmetro na FileOpen função deverá ser maior ou igual à soma de todos os bytes necessários para gravar os dados da matriz e o descritor de matriz. O descritor especifica a classificação da matriz, o tamanho e os limites inferiores para cada classificação. Seu comprimento é igual a 2 mais 8 vezes o número de dimensões: 2 + 8 * NumberOfDimensions.

    Por exemplo, a seguinte declaração de matriz requer 218 bytes quando a matriz é gravada no disco:

    Dim MyArray(4, 9) As Integer
    

    Os 218 bytes são distribuídos da seguinte maneira: 18 bytes para o descritor (2 + 8 * 2) e 100 bytes para os dados (5 * 10 * 4).

  • FileGetObject lê elementos de estruturas como se cada um estivesse sendo lido individualmente, exceto que não há preenchimento entre elementos. No disco, uma matriz dinâmica em um tipo definido pelo usuário (escrito com FilePutObject) é prefixada por um descritor cujo comprimento é igual a 2 mais 8 vezes o número de dimensões: 2 + 8 * NumberOfDimensions. O comprimento do RecordLength registro especificado pela cláusula na FileOpen função deve ser maior ou igual à soma de todos os bytes necessários para ler os elementos individuais, incluindo quaisquer matrizes e seus descritores. A VBFixedStringAttribute classe pode ser aplicada a campos de cadeia de caracteres nas estruturas para indicar o tamanho da cadeia de caracteres quando gravada em disco.

Modo binário

Para arquivos abertos no Binary modo , todas as Random regras se aplicam, com estas exceções:

  • A cláusula RecordLength na função de FileOpen não está em vigor. FileGetObject lê todas as variáveis do disco de forma contígua, ou seja, sem preenchimento entre registros.

  • Para qualquer matriz que não seja uma matriz em uma estrutura, FileGetObject lê apenas os dados. Nenhum descritor é lido.

FileGetObject lê cadeias de caracteres de comprimento variável que não são elementos de estruturas sem esperar o descritor de comprimento de dois bytes. O número de bytes lidos é igual ao número de caracteres que já estão na cadeia de caracteres.

Importante

Ao ler de arquivos, não tome decisões sobre o conteúdo de um arquivo com base na extensão de nome de arquivo. Por exemplo, um arquivo chamado Form1.vb pode não ser um arquivo de origem do Visual Basic.

Aplica-se a

Confira também