Funzione FileGet
Aggiornamento: novembre 2007
Legge i dati da un file aperto su disco e li assegna a una variabile.
Nelle operazioni di I/O su file, la funzionalità My garantisce produttività e prestazioni migliori rispetto a FileGet. Per ulteriori informazioni, vedere Oggetto My.Computer.FileSystem.
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Object, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Short, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Integer, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Single, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Double, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Decimal, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Byte, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Boolean, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As Date, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
ByVal FileNumber As Integer, _
ByRef Value As System.Array, _
Optional RecordNumber As Integer = -1, _
Optional ArrayIsDynamic As Boolean = False _
)
' -or-
Public Overloads Sub FileGet(
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 in modalità Random) o numero di byte (file in modalità Binary) in corrispondenza del quale inizia la lettura.ArrayIsDynamic
Facoltativo. Valido solo per la scrittura di una matrice. Specifica se è necessario considerare la matrice come dinamica e se è necessario un descrittore di matrice per la definizione delle dimensioni e dei limiti della matrice.StringIsFixedLength
Facoltativo. Valido solo per la scrittura di una stringa. Specifica se scrivere un descrittore a due byte per la stringa che descrive la lunghezza. Il valore predefinito è False.
Eccezioni
Tipo di eccezione |
Numero di errore |
Condizione |
---|---|---|
RecordNumber < 1 e diverso da -1. |
||
FileNumber non esiste. |
||
Modalità di accesso ai file non valida. |
Se si esegue l'aggiornamento delle applicazioni Visual Basic 6.0 che utilizzano la gestione degli errori non strutturata, vedere la colonna "Numero di errore". È possibile confrontare il numero di errore con la Proprietà Number (oggetto Err). Se possibile, tuttavia, si consiglia di sostituire il controllo dell'errore con la procedura illustrata nella sezione Cenni preliminari sulla gestione strutturata delle eccezioni per Visual Basic.
Note
FileGet è valido solo in modalità Random e Binary.
I dati letti tramite FileGet vengono in genere scritti in un file con FilePut.
Il primo record o byte di un file corrisponde alla posizione 1, il secondo alla posizione 2 e così via. Se RecordNumber viene omesso, verrà letto il record o il byte successivo, ovvero quello che segue l'ultima funzione FileGet o FilePut (oppure quello indicato dall'ultima funzione Seek).
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. Ad esempio, un file denominato Form1.vb potrebbe non essere un file di origine di Visual Basic. |
Modalità Random
Per i file aperti in modalità Random vengono adottati i seguenti criteri:
Se la lunghezza dei dati letti è minore della lunghezza specificata nella clausola RecordLength della funzione FileOpen, FileGet leggerà i record successivi entro i limiti della lunghezza dei record. Lo spazio compreso tra la fine di un record e l'inizio di quello successivo viene riempito con il contenuto esistente del buffer di file. Dal momento che non è possibile stabilire con precisione la quantità dei dati di spaziatura interna, è in genere consigliabile verificare che la lunghezza del record corrisponda a quella dei dati in lettura.
Per impostazione predefinita, se la variabile in lettura è una stringa, FileGet legge un descrittore a due byte che contiene la lunghezza di stringa, quindi i dati nella 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 e nelle versioni precedenti sono supportate stringhe a lunghezza fissa e non è prevista la scrittura del descrittore della lunghezza in caso di trasferimento in un file. Se si desidera leggere una stringa senza descrittore, è necessario passare True al parametro StringIsFixedLength. È inoltre necessario che la lunghezza della stringa letta sia corretta.
Se la variabile in lettura è una matrice, è possibile scegliere se leggere un descrittore delle dimensioni della matrice. Per scrivere il descrittore, impostare il parametro ArrayIsDynamic su True. La modalità di lettura della matrice deve corrispondere al modo in cui la matrice è stata scritta. Se è stata scritta con il descrittore, è necessario leggere quest'ultimo. Se non viene utilizzato il descrittore, le dimensioni e i limiti della matrice passata in FileGet determinano gli elementi da leggere.
Il descrittore specifica il numero di indici della matrice, la dimensione e i limiti inferiori di ogni indice. La lunghezza è uguale a 2 + 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 a scrivere i dati e il descrittore della matrice. La scrittura su disco della matrice con la seguente dichiarazione richiede, ad esempio, 218 byte.
Dim MyArray(4,9) As Integer
I 218 byte sono distribuiti come segue:
18 byte per il descrittore: (2 + 8 * 2)
200 byte per i dati: (5 * 10 * 4).
Se la variabile in lettura è di qualsiasi altro tipo, ovvero non è una stringa di lunghezza variabile o un oggetto, FileGet leggerà solo i dati variabili. È necessario che la lunghezza del record specificata dalla clausola RecordLength della funzione FileOpen sia superiore o uguale alla lunghezza dei dati in lettura.
Con la funzione FileGet gli elementi delle strutture vengono letti come se si trattasse di elementi singoli, con la sola differenza che in questo caso non è presente spaziatura interna tra gli elementi. A una matrice dinamica di tipo definito dall'utente (scritta con la funzione FilePut) viene anteposto su disco un descrittore di lunghezza uguale a 2 + 8 volte il numero delle dimensioni, ovvero (2 + 8 * NumberOfDimensions). La lunghezza del record specificata dalla clausola RecordLength nella funzione FileOpen deve essere maggiore o uguale alla somma di tutti i byte necessari per leggere i singoli elementi. Sono incluse eventuali matrici e relativi descrittori. È possibile applicare l'attributo VBFixedString ai campi stringa nelle strutture per indicare le dimensioni di una stringa in fase di scrittura su disco.
Modalità Binary
Per i file aperti in modalità Binary, viene applicata la maggior parte delle regole della modalità Random con alcune eccezioni. Le regole riportate di seguito relative ai file aperti in modalità Binary differiscono dalle regole relative alla modalità Random :
La clausola RecordLength nella funzione FileOpen non ha alcun effetto. FileGet legge tutte le variabili dal disco in modo contiguo, vale a dire senza spaziatura interna tra i record.
In caso di matrici diverse da quelle di una struttura, FileGet legge solo i dati. Il descrittore non viene letto.
FileGet 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: La lettura da un file mediante la funzione FileGet richiede l'accesso Read dall'enumerazione FileIOPermissionAccess.
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)