FileSystem.FileGetObject(Int32, Object, Int64) Methode

Definition

Liest Daten aus einer offenen Datenträgerdatei in eine Variable.Reads data from an open disk file into a variable. Die My-Funktion bietet höhere Produktivität und Leistung bei Datei-E/A-Vorgängen als FileGetObject.The My feature gives you better productivity and performance in file I/O operations than FileGetObject. Weitere Informationen finden Sie unter FileSystem.For more information, see 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.Required. Eine beliebige gültige Dateinummer.Any valid file number.

Value
Object

Erforderlich.Required. Der gültige Name einer Variablen, in die Daten gelesen werden.Valid variable name into which data is read.

RecordNumber
Int64

Dies ist optional.Optional. Datensatznummer (Dateien im Random-Modus) oder Bytenummer (Dateien im Binary-Modus), bei der der Lesevorgang beginnt.Record number (Random mode files) or byte number (Binary mode files) at which reading starts.

Beispiele

Im folgenden Beispiel wird ein Datensatz in eine Testdatei gelesen und dann abgerufen.The following example reads a record into a test file and then retrieves it.

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 Type Object anstelle eines anderen Typs zurückgegeben wird, z. b. Integer, Long, Shortusw.The FileGetObject function is used instead of FileGet to avoid ambiguities at compile time if type Object is returned instead of another type, such as Integer, Long, Short, and so forth.

Wenn Sie beabsichtigen, den Variant-Typ zu schreiben, ist FileGetObject erforderlich.If you intend to write out the Variant type, FileGetObject is required. Wenn Sie im Zweifelsfall ein Objekt für den zweiten Parameter verwenden, wird immer die Verwendung von FilePutObject und FileGetObjectempfohlen.When in doubt, if you are using an object for the second parameter, it is always suggested that you use FilePutObject and FileGetObject.

FileGetObject ist nur im Random-und Binary Modus gültig.FileGetObject is valid only in Random and Binary mode.

Mit FileGetObject gelesene Daten werden in der Regel mit FilePutObjectgeschrieben.Data read with FileGetObject is usually written with FilePutObject.

Der erste Datensatz oder das Byte in einer Datei befindet sich an Position 1, der zweite Datensatz bzw. das zweite Byte befindet sich an Position 2 usw.The first record or byte in a file is at position 1, the second record or byte is at position 2, and so on. Wenn Sie RecordNumberweglassen, liest FileGetObject den Datensatz oder das Byte nach der letzten FileGetObject oder FilePutObject Funktion (bzw. auf die letzte Seek Funktion).If you omit RecordNumber, FileGetObject reads the record or byte after the last FileGetObject or FilePutObject function (or pointed to by the last Seek function).

Zufälliger ModusRandom Mode

Für Dateien, die im Random Modus geöffnet werden, gelten die folgenden Regeln:For files opened in Random mode, the following rules apply:

  • Wenn die Länge der gelesenen Daten kleiner ist als die Länge, die in der RecordLength-Klausel der FileOpen-Funktion angegeben ist, liest FileGetObject nachfolgende Datensätze über Grenzen der Daten Satz Länge.If the length of the data being read is less than the length specified in the RecordLength clause of the FileOpen function, FileGetObject reads subsequent records on record-length boundaries. Der Leerraum zwischen dem Ende eines Datensatzes und dem Anfang des nächsten Datensatzes wird mit dem vorhandenen Inhalt des Datei Puffers aufgefüllt.The space between the end of one record and the beginning of the next record is padded with the existing contents of the file buffer. Da die Menge der Auffüll Daten nicht genau bestimmt werden kann, empfiehlt es sich, die Daten Satz Länge mit der Länge der gelesenen Daten zu vergleichen.Because the amount of padding data cannot be precisely determined, it is a good idea to have the record length match the length of the data being read.

  • Wenn die Variable, die gelesen wird, eine Zeichenfolge ist, liest FileGetObject standardmäßig einen 2-Byte-Deskriptor, der die Zeichen folgen Länge enthält, und liest dann die Daten, die in die Variable fließen.If the variable being read into is a string, by default FileGetObject reads a two-byte descriptor containing the string length and then reads the data that goes into the variable. Daher muss die von der RecordLength-Klausel der FileOpen-Funktion angegebene Daten Satz Länge mindestens zwei Bytes aufweisen, die größer als die tatsächliche Länge der Zeichenfolge ist.Therefore, the record length specified by the RecordLength clause of the FileOpen function must be at least two bytes greater than the actual length of the string. In Visual Basic 6,0 und früheren Versionen werden Zeichen folgen mit fester Länge unterstützt. beim Lesen einer Datei wird der Längen Deskriptor nicht geschrieben.Visual Basic 6.0 and earlier versions support fixed-length strings and when read to a file, the length descriptor is not written. Wenn Sie eine Zeichenfolge ohne den Deskriptor lesen möchten, sollten Sie True an den StringIsFixedLength-Parameter übergeben, und die Zeichenfolge, in die Sie eingelesen haben, sollte die richtige Länge aufweisen.If you want to read a string without the descriptor, you should pass True to the StringIsFixedLength parameter, and the string you read into should be the correct length.

  • Wenn die zu lesende Variable ein Array ist, muss die vom RecordLength-Parameter in der FileOpen-Funktion angegebene Daten Satz Länge größer oder gleich der Summe aller Bytes sein, die zum Schreiben der Array Daten und des Array Deskriptors erforderlich sind.If the variable being read into is an array, then the record length specified by the RecordLength parameter in the FileOpen function must be greater than or equal to the sum of all the bytes required to write the array data and the array descriptor. Der Deskriptor gibt den Rang des Arrays, die Größe und die unteren Grenzen für jeden Rang an.The descriptor specifies the rank of the array, the size, and the lower bounds for each rank. Die Länge ist 2 plus das 8-fache der Anzahl der Dimensionen: 2 + 8 * anzahldimensionen.Its length equals 2 plus 8 times the number of dimensions: 2 + 8 * NumberOfDimensions.

    Die folgende Array Deklaration benötigt z. b. 218 bytes, wenn das Array auf den Datenträger geschrieben wird:For example, the following array declaration requires 218 bytes when the array is written to disk:

    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).The 218 bytes are distributed as follows: 18 bytes for the descriptor (2 + 8 * 2), and 100 bytes for the data (5 * 10 * 4).

  • FileGetObject liest Elemente von Strukturen so, als ob jede einzeln gelesen würde, mit dem Unterschied, dass es keine Auffüll Zeichen zwischen Elementen gibt.FileGetObject reads elements of structures as if each were being read individually, except that there is no padding between elements. Auf einem Datenträger wird einem dynamischen Array in einem benutzerdefinierten Typ (geschrieben mit FilePutObject) ein Deskriptor vorangestellt, dessen Länge 2 plus dem 8-fachen der Anzahl von Dimensionen entspricht: 2 + 8 * anzahldimensionen.On disk, a dynamic array in a user-defined type (written with FilePutObject) is prefixed by a descriptor whose length equals 2 plus 8 times the number of dimensions: 2 + 8 * NumberOfDimensions. Die von der RecordLength-Klausel in der FileOpen-Funktion angegebene Daten Satz Länge muss größer oder gleich der Summe aller Bytes sein, die zum Lesen der einzelnen Elemente erforderlich sind, einschließlich der Arrays und ihrer Deskriptoren.The record length specified by the RecordLength clause in the FileOpen function must be greater than or equal to the sum of all the bytes required to read the individual elements, including any arrays and their descriptors. Die VBFixedStringAttribute-Klasse kann auf Zeichen folgen Felder in den-Strukturen angewendet werden, um die Größe der Zeichenfolge beim Schreiben auf den Datenträger anzugeben.The VBFixedStringAttribute class can be applied to string fields in the structures to indicate the size of string when written to disk.

BinärmodusBinary Mode

Für Dateien, die im Binary Modus geöffnet wurden, gelten alle Random Regeln mit folgenden Ausnahmen:For files opened in Binary mode, all of the Random rules apply, with these exceptions:

  • Die RecordLength-Klausel in der FileOpen-Funktion hat keine Auswirkungen.The RecordLength clause in the FileOpen function has no effect. FileGetObject liest alle Variablen von einem Datenträger zusammenhängend, d. h. ohne Auffüll Zeichen zwischen Datensätzen.FileGetObject reads all variables from disk contiguously, that is, with no padding between records.

  • Bei einem anderen Array als einem Array in einer Struktur liest FileGetObject nur die Daten.For any array other than an array in a structure, FileGetObject reads only the data. Es wurde kein Deskriptor gelesen.No descriptor is read.

FileGetObject liest Zeichen folgen variabler Länge, bei denen es sich nicht um Elemente von Strukturen handelt, ohne den zwei Byte langen Längen Deskriptor zu erwarten.FileGetObject reads variable-length strings that are not elements of structures without expecting the two-byte length descriptor. Die Anzahl der gelesenen Bytes ist mit der Anzahl von Zeichen in der Zeichenfolge.The number of bytes read equals the number of characters already in the string.

Wichtig

Treffen Sie beim Lesen aus Dateien keine Entscheidungen zum Inhalt einer Datei, die auf der Dateinamenerweiterung basiert.When reading from files, do not make decisions about the contents of a file based on the file name extension. Beispielsweise ist eine Datei mit dem Namen Form1. vb möglicherweise keine Visual Basic Quelldatei.For example, a file named Form1.vb may not be a Visual Basic source file.

Gilt für:

Siehe auch