FileGetObject-Funktion
Aktualisiert: November 2007
Liest Daten aus einer geöffneten Datenträgerdatei in eine Variable ein.
Das My-Feature ermöglicht bei Datei-E/A-Vorgängen höhere Produktivität und Leistung als FileGetObject. Weitere Informationen hierzu finden Sie unter My.Computer.FileSystem-Objekt.
Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Object, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Short, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Integer, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Single, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Double, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Decimal, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Byte, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Boolean, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As Date, _
Optional RecordNumber As Integer = -1 _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As System.Array, _
Optional RecordNumber As Integer = -1, _
Optional ArrayIsDynamic As Boolean = False _
)
' -or-
Overloads Public Sub FileGetObject( _
ByVal FileNumber As Integer, _
ByRef Value As String, _
Optional RecordNumber As Integer = -1, _
Optional StringIsFixedLength As Boolean = False _
)
Parameter
FileNumber
Erforderlich. Beliebige gültige Dateinummer.Value
Erforderlich. Name einer gültigen Variablen, in die die Daten eingelesen werden.RecordNumber
Optional. Datensatznummer (Dateien im Random-Modus) oder Bytenummer (Dateien im Binary-Modus), an der der Lesevorgang beginnt.ArrayIsDynamic
Optional. Gilt nur beim Schreiben eines Arrays. Gibt an, ob das Array als dynamisches Array betrachtet werden soll und ob ein Arraydeskriptor mit Größe und Begrenzungen des Arrays geschrieben wird.StringIsFixedLength
Optional. Gilt nur beim Schreiben einer Zeichenfolge. Gibt an, ob ein 2-Byte-Deskriptor mit Längenbeschreibung für die Zeichenfolge geschrieben werden soll. Der Standardwert ist False.
Hinweise
Die FileGetObject-Funktion wird anstelle von FileGet verwendet, um zur Kompilierungszeit Mehrdeutigkeiten zu vermeiden, wenn der Typ Object anstelle anderer Typen wie Integer, Long, Short usw. zurückgegeben wird.
Wenn Sie beabsichtigen, den Typ Variant zu schreiben, ist FileGetObject erforderlich. Wenn Sie nicht genau wissen, ob der zweite Parameter mit einem Objekt belegt wird, ist es immer empfehlenswert, FilePutObject und FileGetObject zu verwenden.
FileGetObject ist nur im Random-Modus und im Binary-Modus gültig.
Daten, die mit FileGetObject gelesen werden, werden normalerweise mit FilePutObject geschrieben.
Der erste Datensatz oder das erste Byte einer Datei hat die Position 1, der zweite Datensatz bzw. das zweite Byte die Position 2 usw. Wenn Sie RecordNumber nicht angeben, liest FileGetObject den Datensatz bzw. das Byte ein, der bzw. das auf die letzte FileGetObject-Funktion oder FilePutObject-Funktion folgt (bzw. auf den oder das die letzte Seek-Funktion zeigt).
Random-Modus
Für Dateien, die im Random-Modus geöffnet werden, gelten die folgenden Regeln:
Unterschreitet die Länge der zu lesenden Daten die in der RecordLength-Klausel der FileOpen-Funktion festgelegte Länge, so liest FileGetObject nachfolgende Datensätze trotzdem immer an der durch die Datensatzlänge festgelegten Grenze. Der freie Raum zwischen dem Ende eines Datensatzes und dem Anfang des nächsten Datensatzes wird mit dem bestehenden Inhalt des Dateipuffers aufgefüllt. Da die Länge der Fülldaten nicht genau bestimmt werden kann, sollte die Datensatzlänge immer genau mit der Länge der eingelesenen Daten übereinstimmen.
Wird eine Zeichenfolgenvariable eingelesen, liest FileGetObject standardmäßig einen 2-Byte-Deskriptor mit der Länge der Zeichenfolge, gefolgt vom eigentlichen Inhalt der Variablen ein. Daher muss die in der RecordLength-Klausel der FileOpen-Funktion festgelegte Datensatzlänge mindestens 2 Bytes größer sein als die tatsächliche Länge der Zeichenfolge. In Visual Basic 6.0 und früheren Versionen werden Zeichenfolgen mit fester Länge unterstützt, für die beim Einlesen in eine Datei kein Längendeskriptor geschrieben wird. Wenn Sie eine Zeichenfolge ohne Deskriptor einlesen möchten, sollten Sie True an den StringIsFixedLength-Parameter übergeben, und die Zeichenfolge, die Sie einlesen, sollte die richtige Länge aufweisen.
Wenn es sich bei der eingelesenen Variablen um ein Array handelt, haben Sie die Möglichkeit, einen Deskriptor mit Größe und Dimensionen des Arrays einzulesen. Zum Lesen des Deskriptors legen Sie den ArrayIsDynamic-Parameter auf True fest. Wie ein Array gelesen wird, richtet sich nach der Art, in der es geschrieben wurde. Wenn es mit dem Deskriptor geschrieben wurde, muss es mit ihm eingelesen werden. Wurde es nicht mit dem Deskriptor geschrieben, wird anhand der an FileGetObject übergebenen Größe und Begrenzungen des Arrays bestimmt, was gelesen werden soll.
Der Deskriptor gibt den Rang des Arrays, die Größe und die Untergrenze jeder Dimension an. Seine Länge entspricht 2 plus 8 Mal die Anzahl von Dimensionen: 2 + 8 * NumberOfDimensions. Die durch den RecordLength-Parameter der FileOpen-Funktion angegebene Datensatzlänge muss größer oder gleich der Summe aller Bytes sein, die erforderlich sind, um die Daten des Arrays und den Arraydeskriptor zu schreiben. Die folgende Arraydeklaration erfordert z. B. 118 Bytes, wenn das Array auf einen Datenträger geschrieben wird:
Dim MyArray(4,9) As Integer
Die 118 Bytes sind folgendermaßen verteilt: 18 Bytes für den Deskriptor (2 + 8 * 2) und 100 Bytes für die Daten (5 * 10 * 2).
FileGetObject liest die Elemente von Strukturen so, als ob sie einzeln gelesen würden, jedoch ohne Fülldaten zwischen den Elementen. Auf dem Datenträger wird einem dynamischen Array eines benutzerdefinierten Typs (das mit FilePutObject geschrieben wurde) ein Deskriptor vorangestellt, dessen Länge sich aus der Summe von 2 plus die mit 8 multiplizierte Anzahl von Dimensionen ergibt: 2 + 8 * NumberOfDimensions. Die in der RecordLength-Klausel der FileOpen-Funktion angegebene Datensatzlänge muss mindestens so groß sein wie die Summe aller Bytes, die zum Lesen der einzelnen Elemente, einschließlich aller Arrays und ihrer Deskriptoren, erforderlich sind. Zeichenfolgenfelder in den Strukturen können mit dem Attribut VBFixedStringAttribute-Klasse versehen werden, das die Größe der Zeichenfolge beim Schreiben auf den Datenträger angibt.
Binärer Modus
Von folgenden Ausnahmen abgesehen, gelten für Dateien, die im Binary-Modus geöffnet wurden, alle für den Random-Modus gültigen Regeln:
Die RecordLength-Klausel der FileOpen-Funktion hat keine Auswirkungen. FileGetObject liest alle Variablen nacheinander vom Datenträger, ohne Zwischenräume zwischen Datensätzen aufzufüllen.
Bei jedem Array, das kein Array in einer Struktur ist, liest FileGetObject nur die Daten. Es wird kein Deskriptor gelesen.
FileGetObject liest Zeichenfolgen variabler Länge, die keine Elemente von Strukturen sind, ohne den Längendeskriptor von 2 Bytes zu erwarten. Daher entspricht die Anzahl gelesener Bytes der Zeichenanzahl in der Zeichenfolge.
Sicherheitshinweis: |
---|
Treffen Sie beim Lesen von Daten aus Dateien nicht auf der Grundlage der Dateierweiterung Entscheidungen über den Dateiinhalt. Es kann z. B. sein, dass eine Datei mit dem Namen Form1.vb keine Visual Basic-Quelldatei ist. |
Beispiel
Im folgenden Beispiel wird ein Datensatz in eine Testdatei eingelesen und anschließend daraus 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 für Entwickler intelligenter Geräte
Diese Funktion wird nicht unterstützt.
Anforderungen
Namespace:Microsoft.VisualBasic
**Modul:**FileSystem
**Assembly:**Visual Basic Runtime Library (in Microsoft.VisualBasic.dll)
Siehe auch
Referenz
<unmanagedCodeEntityReference>Seek</unmanagedCodeEntityReference>-Funktion