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

Definição

Lê dados de um ficheiro de disco aberto para uma variável. A My funcionalidade dá-lhe melhor produtividade e desempenho nas operações de I/O de ficheiros do que FileGetObject. Para obter mais informações, veja 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 ficheiro válido.

Value
Object

Required. Nome válido da variável em que os dados são lidos.

RecordNumber
Int64

Optional. Número de registo (Random ficheiros modo) ou número de byte (Binary ficheiros modo) onde a leitura começa.

Exemplos

O exemplo seguinte lê um registo num ficheiro de teste e depois recupera-o.

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)

Observações

A FileGetObject função é usada em vez de FileGet para evitar ambiguidades em tempo de compilação se o tipo Object for devolvido em vez de outro tipo, como Integer, Long, Short, e assim sucessivamente.

Se pretende escrever o Variant tipo, FileGetObject é obrigatório. Em caso de dúvida, se estiver a usar um objeto para o segundo parâmetro, é sempre sugerido que use FilePutObject e FileGetObject.

FileGetObject é válido apenas em Random modo e Binary .

Os dados lidos com FileGetObject são geralmente escritos 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 omitir RecordNumber, FileGetObject lê o registo ou byte após a última FileGetObject ou FilePutObject função (ou apontada pela última Seek função).

Modo Aleatório

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

  • Se o comprimento dos dados a ser lidos for inferior ao comprimento especificado na RecordLength cláusula da FileOpen função, FileGetObject lê registos subsequentes nas fronteiras do comprimento do registo. O espaço entre o fim de um registo e o início do registo seguinte é preenchido com o conteúdo existente do buffer de ficheiros. Como a quantidade de dados de enchimento não pode ser determinada com precisão, é aconselhável que o comprimento do registo coincida com o comprimento dos dados a serem lidos.

  • Se a variável em que se é lida for uma cadeia, por defeito FileGetObject lê um descritor de dois bytes contendo o comprimento da cadeia e depois lê os dados que entram na variável. Portanto, o comprimento do registo especificado pela RecordLength cláusula da FileOpen função deve ser pelo menos dois bytes maior do que o comprimento real da cadeia. O Visual Basic 6.0 e versões anteriores suportam cadeias de comprimento fixo e, quando lidas num ficheiro, o descritor de comprimento não é escrito. Se quiseres ler uma cadeia sem o descriptor, deves passar True para o StringIsFixedLength parâmetro, e a cadeia em que leste deve ter o comprimento correto.

  • Se a variável em que se é lida for um array, então o comprimento do registo especificado pelo RecordLength parâmetro na FileOpen função deve ser maior ou igual à soma de todos os bytes necessários para escrever os dados do array e o descritor do array. O descritor especifica o posto do array, o tamanho e os limites inferiores para cada rank. O seu comprimento é igual a 2 mais 8 vezes o número de dimensões: 2 + 8 * NúmeroDeDimensões.

    Por exemplo, a seguinte declaração do array requer 218 bytes quando o array é escrito no disco:

    Dim MyArray(4, 9) As Integer
    

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

  • FileGetObject lê elementos das estruturas como se cada um estivesse a ser lido individualmente, exceto que não há preenchimento entre elementos. No disco, um array dinâmico num tipo definido pelo utilizador (escrito com FilePutObject) é precedido por um descritor cujo comprimento é igual a 2 mais 8 vezes o número de dimensões: 2 + 8 * NumberOfDimensions. O comprimento do registo 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 arrays e os seus descritores. A VBFixedStringAttribute classe pode ser aplicada a campos de strings nas estruturas para indicar o tamanho da string quando escrita no disco.

Modo Binário

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

  • A RecordLength cláusula na FileOpen função não tem efeito. FileGetObject lê todas as variáveis do disco de forma contínua, ou seja, sem preenchimento entre registos.

  • Para qualquer array que não seja um array numa estrutura, FileGetObject lê apenas os dados. Não é lido qualquer descritor.

FileGetObject lê cadeias 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 já presentes na cadeia.

Importante

Ao ler a partir de ficheiros, não tome decisões sobre o conteúdo de um ficheiro com base na extensão do nome do ficheiro. Por exemplo, um ficheiro chamado Form1.vb pode não ser um ficheiro fonte Visual Basic.

Aplica-se a

Ver também