FileSystem.FileGetObject(Int32, Object, Int64) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
RecordLengthcláusula daFileOpenfunção,FileGetObjectlerá 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 pelaRecordLengthcláusula daFileOpenfunçã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á passarTruepara oStringIsFixedLengthparâ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
RecordLengthparâmetro naFileOpenfunçã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 IntegerOs 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).
FileGetObjectlê 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 comFilePutObject) é 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 pelaRecordLengthcláusula naFileOpenfunçã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
RecordLengthcláusula naFileOpenfunção não tem efeito.FileGetObjectlê todas as variáveis do disco contíguamente, ou seja, sem preenchimento entre registros.Para qualquer matriz diferente de uma matriz em uma estrutura,
FileGetObjectlê 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.