FileSystem.FileGetObject(Int32, Object, Int64) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Legge i dati in una variabile da un file aperto sul disco. La funzionalità My
offre un livello più elevato di produttività e prestazioni nelle operazioni di I/O dei file rispetto a FileGetObject
. Per altre informazioni, vedere 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)
Parametri
- FileNumber
- Int32
Obbligatorio. Qualsiasi numero di file valido.
- Value
- Object
Obbligatorio. Nome valido della variabile in cui vengono letti i dati.
- RecordNumber
- Int64
facoltativo. Numero di record (file in modalità Random
) o numero di byte (file in modalità Binary
) in corrispondenza del quale viene avviata la lettura.
Esempio
Nell'esempio seguente viene letto un record in un file di test e quindi lo 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)
Commenti
La FileGetObject
funzione viene usata invece di FileGet
evitare ambiguità in fase di compilazione se il tipo Object
viene restituito anziché un altro tipo, ad esempio Integer
, Short
Long
, e così via.
Se si intende scrivere il Variant
tipo, FileGetObject
è necessario. Se si usa un oggetto per il secondo parametro, è sempre consigliabile usare FilePutObject
e FileGetObject
.
FileGetObject
è valido solo in Random
e Binary
modalità.
I dati letti con FileGetObject
vengono in genere scritti con FilePutObject
.
Il primo record o byte in un file è in posizione 1, il secondo record o byte è in posizione 2 e così via. Se si omette RecordNumber
, FileGetObject
legge il record o il byte dopo l'ultima o FilePutObject
funzione (o punta a dall'ultima FileGetObject
Seek
funzione).
Modalità casuale
Per i file aperti in Random
modalità, si applicano le regole seguenti:
Se la lunghezza dei dati letti è minore della lunghezza specificata nella
RecordLength
clausola dellaFileOpen
funzione,FileGetObject
legge i record successivi sui limiti di lunghezza record. Lo spazio compreso tra la fine di un record e l'inizio del record successivo viene riempito con il contenuto esistente del buffer del file. Poiché la quantità di dati di riempimento non può essere determinata in modo preciso, è consigliabile avere la lunghezza del record corrispondente alla lunghezza dei dati letti.Se la variabile in lettura è una stringa, per impostazione predefinita
FileGetObject
viene letto un descrittore a due byte contenente la lunghezza della stringa e quindi legge i dati che passano alla variabile. Pertanto, la lunghezza del record specificata dallaRecordLength
clausola dellaFileOpen
funzione deve essere almeno due byte maggiore della lunghezza effettiva della stringa. Visual Basic 6.0 e versioni precedenti supportano stringhe a lunghezza fissa e quando si legge in un file, il descrittore di lunghezza non viene scritto. Se si vuole leggere una stringa senza il descrittore, è necessario passareTrue
alStringIsFixedLength
parametro e la stringa in cui si legge deve essere la lunghezza corretta.Se la variabile in cui si legge è una matrice, è necessario che la lunghezza del record specificata dal parametro
RecordLength
della funzioneFileOpen
sia superiore o uguale alla somma di tutti i byte necessari per scrivere i dati e il descrittore della matrice. Il descrittore specifica il rango della matrice, le dimensioni e i limiti inferiori per ogni rango. La lunghezza è uguale a 2 più 8 volte il numero di dimensioni: 2 + 8 * NumberOfDimensions.Ad esempio, la dichiarazione di matrice seguente richiede 218 byte quando la matrice viene scritta su disco:
Dim MyArray(4, 9) As Integer
I 218 byte vengono distribuiti come segue: 18 byte per il descrittore (2 + 8 * 2) e 100 byte per i dati (5 * 10 * 4).
FileGetObject
legge elementi di strutture come se ognuno fosse letto singolarmente, ad eccezione del fatto che non vi è alcuna spaziatura interna tra gli elementi. Su disco, una matrice dinamica in un tipo definito dall'utente (scritta conFilePutObject
) è preceduta da un descrittore la cui lunghezza è uguale a 2 più 8 volte il numero di dimensioni: 2 + 8 * NumberOfDimensions. La lunghezza del record specificata dallaRecordLength
clausola nellaFileOpen
funzione deve essere maggiore o uguale alla somma di tutti i byte necessari per leggere i singoli elementi, incluse le matrici e i relativi descrittori. La VBFixedStringAttribute classe può essere applicata ai campi stringa nelle strutture per indicare la dimensione della stringa quando viene scritta su disco.
Modalità binaria
Per i file aperti in Binary
modalità, tutte le Random
regole si applicano, con queste eccezioni:
La
RecordLength
clausola nellaFileOpen
funzione non ha alcun effetto.FileGetObject
legge tutte le variabili dal disco in modo contiguo, ovvero senza spaziatura interna tra record.Per qualsiasi matrice diversa da una matrice in una struttura,
FileGetObject
legge solo i dati. Non viene letto alcun descrittore.
FileGetObject
legge stringhe a lunghezza variabile che non sono elementi di strutture senza aspettarsi il descrittore di lunghezza a due byte. Il numero di byte letti equivale al numero di caratteri già nella stringa.
Importante
Quando si legge da file, non prendere decisioni sul contenuto di un file in base all'estensione del nome file. Ad esempio, un file denominato Form1.vb potrebbe non essere un file di origine di Visual Basic.