FileSystem.FileGetObject(Int32, Object, Int64) Metodo

Definizione

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, ShortLong, 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 FileGetObjectSeek 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 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 dalla RecordLength clausola della FileOpen 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 passare True al StringIsFixedLength 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 funzione FileOpen 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 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à, tutte le Random regole si applicano, 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 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.

Si applica a

Vedi anche