FileSystem.FileGetObject(Int32, Object, Int64) Methode

Definition

Liest Daten aus einer offenen Datenträgerdatei in eine Variable. Das My-Feature bietet höhere Produktivität und Leistung bei Datei-E/A-Vorgängen als FileGetObject. Weitere Informationen finden Sie unter 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)

Parameter

FileNumber
Int32

Erforderlich. Eine beliebige gültige Dateinummer.

Value
Object

Erforderlich. Der gültige Name einer Variablen, in die Daten gelesen werden.

RecordNumber
Int64

Dies ist optional. Datensatznummer (Dateien im Random-Modus) oder Bytenummer (Dateien im Binary-Modus), bei der der Lesevorgang beginnt.

Beispiele

Im folgenden Beispiel wird ein Datensatz in eine Testdatei gelesen und dann abgerufen.

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)

Hinweise

Die FileGetObject Funktion wird anstelle von FileGet verwendet, um Mehrdeutigkeiten zur Kompilierzeit zu vermeiden, wenn der Typ Object anstelle eines anderen Typs zurückgegeben wird, z Integer. B. , Long, Shortusw.

Wenn Sie den Variant Typ ausschreiben möchten, FileGetObject ist erforderlich. Wenn Sie im Zweifelsfall ein -Objekt für den zweiten Parameter verwenden, wird immer empfohlen, und zu verwenden FilePutObjectFileGetObject.

FileGetObject ist nur im Random - und Binary -Modus gültig.

Datenlesevorgänge mit FileGetObject werden normalerweise mit FilePutObjectgeschrieben.

Der erste Datensatz oder das erste Byte in einer Datei befindet sich an Position 1, der zweite Datensatz oder das zweite Byte an Position 2 usw. Wenn Sie weglassenRecordNumber, FileGetObject liest der Datensatz oder das Byte nach der letzten funktion oder FilePutObject der letzten FileGetObject Funktion (oder wird von der letzten Seek Funktion darauf verwiesen).

Zufälliger Modus

Für dateien, die im Random Modus geöffnet werden, gelten die folgenden Regeln:

  • Wenn die Länge der zu lesenden Daten kleiner als die in der RecordLength -Klausel der FileOpen -Funktion angegebene Länge ist, FileGetObject werden nachfolgende Datensätze an Datensatzlängengrenzen gelesen. Der Leerraum zwischen dem Ende eines Datensatzes und dem Anfang des nächsten Datensatzes ist mit dem vorhandenen Inhalt des Dateipuffers gepolstert. Da die Menge der Auffüllungsdaten nicht genau bestimmt werden kann, empfiehlt es sich, die Datensatzlänge mit der Länge der zu lesenden Daten übereinzustimmen.

  • Wenn die Variable, in die eingelesen wird, eine Zeichenfolge ist, liest standardmäßig FileGetObject ein Zwei-Byte-Deskriptor, der die Zeichenfolgenlänge enthält, und liest dann die Daten, die in die Variable gehen. Daher muss die von der -Klausel der RecordLengthFileOpen -Funktion angegebene Datensatzlänge mindestens zwei Bytes größer als die tatsächliche Länge der Zeichenfolge sein. Visual Basic 6.0 und frühere Versionen unterstützen Zeichenfolgen mit fester Länge, und beim Lesen in eine Datei wird der Längendeskriptor nicht geschrieben. Wenn Sie eine Zeichenfolge ohne den Deskriptor lesen möchten, sollten Sie an den Parameter übergeben True , und die Zeichenfolge, in die StringIsFixedLength Sie einlesen, sollte die richtige Länge aufweisen.

  • Wenn die Variable, in die gelesen wird, ein Array ist, muss die vom RecordLength Parameter in der FileOpen Funktion angegebene Datensatzlänge größer oder gleich der Summe aller Bytes sein, die zum Schreiben der Arraydaten und des Arraydeskriptors erforderlich sind. Der Deskriptor gibt den Rang des Arrays, die Größe und die Untergrenze für jeden Rang an. Seine Länge entspricht 2 plus 8 Mal der Anzahl der Dimensionen: 2 + 8 * NumberOfDimensions.

    Die folgende Arraydeklaration erfordert beispielsweise 218 Bytes, wenn das Array auf den Datenträger geschrieben wird:

    Dim MyArray(4, 9) As Integer
    

    Die 218 Bytes werden wie folgt verteilt: 18 Bytes für den Deskriptor (2 + 8 * 2) und 100 Bytes für die Daten (5 * 10 * 4).

  • FileGetObject liest Elemente von Strukturen so, als ob sie einzeln gelesen würden, mit der Ausnahme, dass es keine Auffüllung zwischen Elementen gibt. Auf dem Datenträger wird einem dynamischen Array in einem benutzerdefinierten Typ (geschrieben mit FilePutObject) ein Deskriptor vorangestellt, dessen Länge 2 plus 8 mal der Anzahl der Dimensionen entspricht: 2 + 8 * NumberOfDimensions. Die durch die RecordLength -Klausel in der FileOpen -Funktion angegebene Datensatzlänge muss größer oder gleich der Summe aller Bytes sein, die zum Lesen der einzelnen Elemente erforderlich sind, einschließlich aller Arrays und ihrer Deskriptoren. Die VBFixedStringAttribute -Klasse kann auf Zeichenfolgenfelder in den Strukturen angewendet werden, um die Größe der Zeichenfolge anzugeben, wenn sie auf den Datenträger geschrieben wird.

Binärmodus

Für Dateien, die Random im Binary Modus geöffnet werden, gelten alle Regeln mit den folgenden Ausnahmen:

  • Die RecordLength -Klausel in der FileOpen -Funktion hat keine Auswirkung. FileGetObject liest alle Variablen vom Datenträger zusammenhängend, d. h. ohne Auffüllung zwischen Datensätzen.

  • Bei einem anderen Array als einem Array in einer Struktur FileGetObject werden nur die Daten gelesen. Es wird kein Deskriptor gelesen.

FileGetObject liest Zeichenfolgen mit variabler Länge, die keine Elemente von Strukturen sind, ohne den Deskriptor für die Länge von zwei Byte zu erwarten. Die Anzahl der gelesenen Bytes entspricht der Anzahl von Zeichen, die bereits in der Zeichenfolge enthalten sind.

Wichtig

Treffen Sie beim Lesen aus Dateien keine Entscheidungen über den Inhalt einer Datei basierend auf der Dateinamenerweiterung. Beispielsweise ist eine Datei mit dem Namen Form1.vb möglicherweise keine Visual Basic-Quelldatei.

Gilt für:

Weitere Informationen