FileSystem.FileGetObject(Int32, Object, Int64) Metodo

Definizione

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 RecordLength clausola della FileOpen funzione, FileGetObject legge 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 FileGetObject legge un descrittore a due byte contenente la lunghezza della stringa e quindi legge i dati inseriti nella variabile. Pertanto, la lunghezza del record specificata dalla RecordLength clausola della FileOpen funzione 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 passare True al StringIsFixedLength parametro 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 RecordLength parametro nella FileOpen funzione 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 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 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 con FilePutObject) è 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 dalla RecordLength clausola nella FileOpen 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à, vengono applicate tutte le Random regole, con queste eccezioni:

  • La RecordLength clausola nella FileOpen 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 è 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.

Si applica a

Vedi anche