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 da un file del disco aperto in una variabile. La My funzionalità offre una maggiore 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
Required. Qualsiasi numero di file valido.
- Value
- Object
Required. Nome di variabile valido in cui vengono letti i dati.
- RecordNumber
- Int64
Optional. Numero di record (Random file in modalità) o numero di byte (Binary file in modalità) in corrispondenza del quale inizia la lettura.
Esempio
L'esempio seguente legge 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 per evitare ambiguità in fase di compilazione se viene restituito il tipo Object anziché un altro tipo, ad esempio Integer, Long, Shorte così via.
Se si intende scrivere il Variant tipo, FileGetObject è obbligatorio. In caso di dubbio, se si usa un oggetto per il secondo parametro, è sempre consigliabile usare FilePutObject e FileGetObject.
FileGetObject è valido solo in Random modalità e Binary .
I dati letti con FileGetObject vengono in genere scritti con FilePutObject.
Il primo record o byte in un file si trova nella posizione 1, il secondo record o byte si trova nella posizione 2 e così via. Se si omette RecordNumber, FileGetObject legge il record o il byte dopo l'ultima FileGetObject funzione o FilePutObject (o punta all'ultima 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
RecordLengthclausola dellaFileOpenfunzione,FileGetObjectlegge i record successivi sui limiti di lunghezza record. Lo spazio tra la fine di un record e l'inizio del record successivo viene riempito con il contenuto esistente del buffer di file. Poiché non è possibile determinare con precisione la quantità di dati di riempimento, è consigliabile che la lunghezza del record corrisponda alla lunghezza dei dati letti.Se la variabile da leggere è una stringa, per impostazione predefinita
FileGetObjectlegge un descrittore a due byte contenente la lunghezza della stringa e quindi legge i dati inseriti nella variabile. Pertanto, la lunghezza del record specificata dallaRecordLengthclausola dellaFileOpenfunzione deve essere maggiore di almeno due byte rispetto alla lunghezza effettiva della stringa. Visual Basic 6.0 e versioni precedenti supportano stringhe a lunghezza fissa e quando leggono in un file, il descrittore di lunghezza non viene scritto. Se si vuole leggere una stringa senza il descrittore, è necessario passareTruealStringIsFixedLengthparametro e la stringa in cui si legge deve essere la lunghezza corretta.Se la variabile da leggere è una matrice, la lunghezza del record specificata dal
RecordLengthparametro nellaFileOpenfunzione deve essere maggiore o uguale alla somma di tutti i byte necessari per scrivere i dati della matrice e il descrittore di matrice. Il descrittore specifica il rango della matrice, le dimensioni e i limiti inferiori per ogni rango. La sua 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 IntegerI 218 byte vengono distribuiti come segue: 18 byte per il descrittore (2 + 8 * 2) e 100 byte per i dati (5 * 10 * 4).
FileGetObjectlegge gli elementi delle strutture come se ognuno fosse letto singolarmente, ad eccezione del fatto che non esiste 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 dallaRecordLengthclausola nellaFileOpenfunzione 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à, vengono applicate tutte le Random regole, con queste eccezioni:
La
RecordLengthclausola nellaFileOpenfunzione non ha alcun effetto.FileGetObjectlegge tutte le variabili dal disco in modo contiguo, ovvero senza spaziatura interna tra record.Per qualsiasi matrice diversa da una matrice in una struttura,
FileGetObjectlegge 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 è uguale al numero di caratteri già presenti nella stringa.
Important
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 Visual Basic.