Condividi tramite


Funzione FileGetObject

Aggiornamento: novembre 2007

Legge dati da un file aperto su disco e li assegna a una variabile.

Nelle operazioni di I/O dei file la funzionalità My offre un più elevato livello di produttività e prestazioni rispetto a FileGetObject. Per ulteriori informazioni, vedere Oggetto My.Computer.FileSystem.

Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Object, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Short, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Integer, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Single, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Double, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Decimal, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Byte, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Boolean, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As Date, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As System.Array, _
   Optional RecordNumber As Integer = -1, _
   Optional ArrayIsDynamic As Boolean = False _
)
' -or-
Overloads Public Sub FileGetObject( _
   ByVal FileNumber As Integer, _
   ByRef Value As String, _
   Optional RecordNumber As Integer = -1, _
   Optional StringIsFixedLength As Boolean = False _
)

Parametri

  • FileNumber
    Obbligatorio. Qualsiasi numero di file valido.

  • Value
    Obbligatorio. Nome valido della variabile alla quale vengono assegnati i dati del file.

  • RecordNumber
    Facoltativo. Numero di record (file aperti in modalità Random) o di byte (file aperti in modalità Binary) da cui inizia la lettura.

  • ArrayIsDynamic
    Facoltativo. Valido solo per la scrittura di una matrice. Specifica se è necessario considerare la matrice come dinamica e se scrivere un descrittore di matrice che definisce le dimensioni e i limiti della matrice.

  • StringIsFixedLength
    Facoltativo. Valido solo per la scrittura di una stringa. Specifica se scrivere un descrittore a due byte per la stringa di definizione della lunghezza. Il valore predefinito è False.

Note

La funzione FileGetObject viene utilizzata al posto di FileGet per evitare ambiguità in fase di compilazione nel caso in cui venga passato il tipo Object invece di un altro tipo, quale Integer, Long, Short e così via.

Se si desidera scrivere il tipo Variant, è necessario utilizzare la funzione FileGetObject. In caso di dubbio, se si utilizza un oggetto come secondo parametro, si consiglia di utilizzare FilePutObject e FileGetObject.

FileGetObject è valido solo in modalità Random e Binary.

I dati letti tramite FileGetObject vengono in genere scritti con FilePutObject.

Il primo record o byte di un file corrisponde alla posizione 1, il secondo alla posizione 2 e così via. Se RecordNumber viene omesso, FileGetObject leggerà il record o il byte successivo all'ultima funzione FileGetObject o FilePutObject oppure quello indicato dall'ultima funzione Seek.

Modalità Random

Per i file aperti in modalità Random vengono adottati i seguenti criteri:

  • Se la lunghezza dei dati letti è inferiore alla lunghezza specificata nella clausola RecordLength della funzione FileOpen, FileGetObject leggerà i record successivi entro i limiti della lunghezza dei record. Lo spazio compreso tra la fine di un record e l'inizio del record successivo verrà occupato dal contenuto esistente del buffer del file. Poiché non è possibile stabilire con precisione la quantità di dati di spaziatura interna, è consigliabile verificare che la lunghezza del record corrisponda a quella dei dati da leggere.

  • Se la variabile in lettura è una stringa, per impostazione predefinita FileGetObject leggerà un descrittore a due byte contenente la lunghezza della stringa e quindi i dati destinati alla variabile. È pertanto necessario che la lunghezza del record specificata dalla clausola RecordLength della funzione FileOpen sia maggiore di almeno due byte rispetto alla lunghezza effettiva della stringa. In Visual Basic 6.0 e nelle versioni precedenti sono supportate stringhe a lunghezza fissa e non è prevista la scrittura del descrittore della lunghezza in caso di lettura in un file. Se si desidera leggere una stringa senza descrittore, passare True al parametro StringIsFixedLength. È inoltre necessario che la lunghezza della stringa letta sia corretta.

  • Se la variabile da leggere è una matrice, è possibile scegliere se leggere o meno un descrittore delle dimensioni della matrice. Per leggere il descrittore, impostare il parametro ArrayIsDynamic su True. Quando si legge la matrice è necessario tenere conto delle modalità con cui è stata scritta. Se è stato utilizzato il descrittore, è necessario leggerlo, se invece il descrittore è stato omesso, per stabilire cosa leggere verranno utilizzati i limiti e le dimensioni della matrice passata in FileGetObject.

    Il descrittore specifica il numero di indici della matrice, la dimensione e i limiti inferiori di ogni indice. La lunghezza è uguale a 2 più 8 volte il numero delle dimensioni: 2 + 8 * NumberOfDimensions. È necessario che la lunghezza del record specificata dal parametro RecordLength della funzione FileOpen sia superiore o uguale alla somma di tutti i byte necessari per scrivere i dati e il descrittore della matrice. La scrittura su disco della matrice con la seguente dichiarazione richiede, ad esempio, 118 byte:

    Dim MyArray(4,9) As Integer
    

    I 118 byte sono distribuiti nel modo seguente: 18 byte per il descrittore (2 + 8 * 2) e 100 byte per i dati (5 * 10 * 2).

  • Con la funzione FileGetObject gli elementi delle strutture vengono letti come se si trattasse di elementi singoli, con la sola differenza che in questo caso non viene inserita la spaziatura interna degli elementi. A una matrice dinamica di tipo definito dall'utente (scritta con la funzione FilePutObject) viene anteposto su disco un descrittore di lunghezza uguale a 2 più 8 volte il numero delle dimensioni, ovvero 2 + 8 * NumberOfDimensions. È necessario che la lunghezza del record specificata nella clausola RecordLength della funzione FileOpen sia superiore o uguale alla somma di tutti i byte richiesti per la lettura dei singoli elementi, incluse le matrici e i relativi descrittori. È possibile applicare Classe VBFixedStringAttribute ai campi stringa nelle strutture per indicare le dimensioni della stringa in fase di scrittura su disco.

Modalità Binary

Per i file aperti in modalità Binary vengono applicate tutte le regole relative alla modalità Random, con le eccezioni riportate di seguito:

  • La clausola RecordLength della funzione FileOpen non produce alcun effetto. La funzione FileGetObject legge tutte le variabili dal disco in successione senza spaziatura interna tra i record.

  • In caso di matrici diverse da quelle di una struttura, FileGetObject legge solo i dati. Il descrittore non viene letto.

FileGetObject legge stringhe di lunghezza variabile che non costituiscono elementi di strutture senza che sia previsto il descrittore di lunghezza a due byte. Il numero di byte letti equivale al numero di caratteri già presenti della stringa.

Nota sulla sicurezza:

Durante la lettura dai file, tenere presente che l'estensione di un nome file non è di per sé sufficiente a stabilire il contenuto di un file. È infatti possibile che un file denominato, ad esempio, Form1.vb non sia un file di origine di Visual Basic.

Esempio

Nell'esempio riportato di seguito viene letto e recuperato un record di un file da verificare.

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)

Note per gli sviluppatori di applicazioni per Smart Device

Questa funzione non è supportata.

Requisiti

Spazio dei nomi: Microsoft.VisualBasic

**Modulo:**FileSystem

**Assembly:**Visual Basic Runtime Library (in Microsoft.VisualBasic.dll)

Vedere anche

Riferimenti

Funzione FilePut

Funzione FileOpen

Funzione Seek

Funzione FileGet

Altre risorse

Lettura da file in Visual Basic

Scrittura su file in Visual Basic