FileSystem.FileGetObject(Int32, Object, Int64) Methode

Definitie

Leest gegevens uit een geopend schijfbestand in een variabele. De My functie biedt u betere productiviteit en prestaties in bestands-I/O-bewerkingen dan FileGetObject. Zie FileSystem voor meer informatie.

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)

Parameters

FileNumber
Int32

Required. Elk geldig bestandsnummer.

Value
Object

Required. Geldige variabelenaam waarin gegevens worden gelezen.

RecordNumber
Int64

Optional. Recordnummer (Random modusbestanden) of bytenummer (Binary modusbestanden) waarmee het lezen wordt gestart.

Voorbeelden

In het volgende voorbeeld wordt een record in een testbestand gelezen en vervolgens opgehaald.

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)

Opmerkingen

De FileGetObject functie wordt gebruikt in plaats van FileGet om dubbelzinnigheden tijdens het compileren te voorkomen als het type Object wordt geretourneerd in plaats van een ander type, zoals Integer, Long, Shortenzovoort.

Als u van plan bent om het Variant type uit te schrijven, FileGetObject is dit vereist. Als u twijfelt, als u een object gebruikt voor de tweede parameter, wordt altijd aanbevolen dat u gebruikt FilePutObject en FileGetObject.

FileGetObject is alleen geldig in Random en in de Binary modus.

Gegevens die worden gelezen, FileGetObject worden meestal geschreven met FilePutObject.

De eerste record of byte in een bestand bevindt zich op positie 1, de tweede record of byte bevindt zich op positie 2, enzovoort. Als u weglaat RecordNumber, FileGetObject leest u de record of byte na de laatste FileGetObject of FilePutObject functie (of verwijst naar de laatste Seek functie).

Willekeurige modus

Voor bestanden die in Random de modus worden geopend, zijn de volgende regels van toepassing:

  • Als de lengte van de gegevens die worden gelezen kleiner is dan de lengte die is opgegeven in de RecordLength component van de FileOpen functie, FileGetObject leest u volgende records op recordlengtegrenzen. De ruimte tussen het einde van de ene record en het begin van de volgende record wordt opgevuld met de bestaande inhoud van de bestandsbuffer. Omdat de hoeveelheid opvullingsgegevens niet nauwkeurig kan worden bepaald, is het een goed idee om de recordlengte overeen te laten komen met de lengte van de gegevens die worden gelezen.

  • Als de variabele waarnaar wordt gelezen een tekenreeks is, leest u standaard FileGetObject een twee-bytedescriptor met de tekenreekslengte en leest u vervolgens de gegevens die in de variabele worden opgenomen. Daarom moet de recordlengte die is opgegeven door de RecordLength component van de FileOpen functie ten minste twee bytes groter zijn dan de werkelijke lengte van de tekenreeks. Visual Basic 6.0 en eerdere versies ondersteunen tekenreeksen met een vaste lengte en wanneer ze naar een bestand worden gelezen, wordt de lengtedescriptor niet geschreven. Als u een tekenreeks wilt lezen zonder de descriptor, moet u de StringIsFixedLength parameter doorgeven True en moet de tekenreeks die u hebt gelezen, de juiste lengte hebben.

  • Als de variabele die wordt gelezen een matrix is, moet de recordlengte die is opgegeven door de RecordLength parameter in de FileOpen functie groter dan of gelijk zijn aan de som van alle bytes die nodig zijn om de matrixgegevens en de matrixdescriptor te schrijven. De descriptor geeft de rang van de matrix, de grootte en de ondergrenzen voor elke rang aan. De lengte is gelijk aan 2 plus 8 keer het aantal dimensies: 2 + 8 * NumberOfDimensions.

    Voor de volgende matrixdeclaratie zijn bijvoorbeeld 218 bytes vereist wanneer de matrix naar de schijf wordt geschreven:

    Dim MyArray(4, 9) As Integer
    

    De 218 bytes worden als volgt gedistribueerd: 18 bytes voor de descriptor (2 + 8 * 2) en 100 bytes voor de gegevens (5 * 10 * 4).

  • FileGetObject leest elementen van structuren alsof elk afzonderlijk wordt gelezen, behalve dat er geen opvulling tussen elementen is. Op schijf wordt een dynamische matrix in een door de gebruiker gedefinieerd type (geschreven met FilePutObject) voorafgegaan door een descriptor waarvan de lengte gelijk is aan 2 plus 8 keer het aantal dimensies: 2 + 8 * NumberOfDimensions. De recordlengte die is opgegeven door de RecordLength component in de FileOpen functie, moet groter zijn dan of gelijk zijn aan de som van alle bytes die nodig zijn om de afzonderlijke elementen te lezen, inclusief eventuele matrices en descriptors. De VBFixedStringAttribute klasse kan worden toegepast op tekenreeksvelden in de structuren om de grootte van de tekenreeks aan te geven wanneer deze naar de schijf wordt geschreven.

Binaire modus

Voor bestanden die in Binary de Random modus worden geopend, zijn alle regels van toepassing, met deze uitzonderingen:

  • De RecordLength component in de FileOpen functie heeft geen effect. FileGetObject leest alle variabelen van schijf aaneengesloten, dat wil gezegd, zonder opvulling tussen records.

  • Voor een andere matrix dan een matrix in een structuur worden FileGetObject alleen de gegevens gelezen. Er is geen descriptor gelezen.

FileGetObject leest tekenreeksen met de lengte van variabelen die geen elementen van structuren zijn zonder de beschrijving van de lengte van twee bytes te verwachten. Het aantal bytes dat wordt gelezen, is gelijk aan het aantal tekens dat al in de tekenreeks staat.

Important

Wanneer u bestanden leest, moet u geen beslissingen nemen over de inhoud van een bestand op basis van de bestandsnaamextensie. Een bestand met de naam Form1.vb is bijvoorbeeld mogelijk geen Visual Basic bronbestand.

Van toepassing op

Zie ook