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

Definição

Lê dados de um arquivo de disco aberto em uma variável. O My recurso oferece melhor produtividade e desempenho em operações de E/S de 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

Required. Qualquer número de arquivo válido.

Value
Object

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

RecordNumber
Int64

Optional. Número de registro (Random arquivos de modo) ou número de byte (Binary arquivos de modo) no qual a leitura é iniciada.

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 evitar ambiguidades em tempo de compilação se o tipo Object for retornado em vez de outro tipo, como Integer, Longe Shortassim por diante.

Se você pretende escrever 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 modo e Binary no Random modo.

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

O primeiro registo ou byte num ficheiro está na posição 1, o segundo registo ou byte está na posição 2 e assim sucessivamente. Se você omitir RecordNumber, FileGetObject lerá o registro ou byte após a última FileGetObject ou FilePutObject função (ou apontou para a última Seek 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 fim de um registo e o início do registo seguinte é acolchoado com o conteúdo existente da memória intermédia de ficheiros. 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 FileGetObject , lerá um descritor de dois bytes que contém o comprimento da cadeia de caracteres e lerá os dados que vão para a 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. Visual Basic 6.0 e versões anteriores dão suporte a cadeias de caracteres de comprimento fixo e, quando lidas 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 na qual você leu deve ser 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 da 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 em 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 registro especificado pela RecordLength 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 RecordLength cláusula na FileOpen função não tem efeito. FileGetObject lê todas as variáveis do disco contíguamente, ou seja, sem preenchimento entre registros.

  • Para qualquer matriz diferente de uma matriz em uma estrutura, FileGetObject lê apenas os dados. Não é lido nenhum descritor.

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 carateres já existentes na cadeia.

Importante

Ao ler 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 Visual Basic.

Aplica-se a

Confira também