FileSystem.FileGetObject(Int32, Object, Int64) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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
RecordLengthcomponent van deFileOpenfunctie,FileGetObjectleest 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
FileGetObjecteen 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 deRecordLengthcomponent van deFileOpenfunctie 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 deStringIsFixedLengthparameter doorgevenTrueen 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
RecordLengthparameter in deFileOpenfunctie 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 IntegerDe 218 bytes worden als volgt gedistribueerd: 18 bytes voor de descriptor (2 + 8 * 2) en 100 bytes voor de gegevens (5 * 10 * 4).
FileGetObjectleest 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 metFilePutObject) 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 deRecordLengthcomponent in deFileOpenfunctie, 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
RecordLengthcomponent in deFileOpenfunctie heeft geen effect.FileGetObjectleest alle variabelen van schijf aaneengesloten, dat wil gezegd, zonder opvulling tussen records.Voor een andere matrix dan een matrix in een structuur worden
FileGetObjectalleen 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.