FileSystem.FileGetObject(Int32, Object, Int64) Metod

Definition

Läser data från en öppen diskfil till en variabel. Funktionen My ger bättre produktivitet och prestanda i fil-I/O-åtgärder än FileGetObject. Mer information finns i 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)

Parametrar

FileNumber
Int32

Required. Ett giltigt filnummer.

Value
Object

Required. Giltigt variabelnamn som data läse till.

RecordNumber
Int64

Optional. Postnummer (Random lägesfiler) eller bytenummer (Binary lägesfiler) där läsningen startar.

Exempel

I följande exempel läss en post in i en testfil och sedan hämtas den.

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)

Kommentarer

Funktionen FileGetObject används i stället för FileGet för att undvika tvetydigheter vid kompileringstiden om typen Object returneras i stället för en annan typ, till exempel Integer, Long, Shortoch så vidare.

Om du tänker skriva ut Variant typen FileGetObject krävs. Om du är osäker på om du använder ett -objekt för den andra parametern föreslås det alltid att du använder FilePutObject och FileGetObject.

FileGetObject är endast giltigt i Random och Binary läge.

Data som läss med FileGetObject skrivs vanligtvis med FilePutObject.

Den första posten eller byte i en fil är på plats 1, den andra posten eller byte är på plats 2 och så vidare. Om du utelämnar RecordNumberFileGetObject läser du posten eller bytet efter den sista FileGetObject funktionen eller FilePutObject funktionen (eller pekas på av den sista Seek funktionen).

Slumpmässigt läge

För filer som öppnas i Random läge gäller följande regler:

  • Om längden på de data som läses är mindre än den längd som anges i -satsen FileOpen i RecordLength funktionen läser FileGetObject efterföljande poster på postlängdsgränser. Utrymmet mellan slutet av en post och början av nästa post är vadderat med det befintliga innehållet i filbufferten. Eftersom mängden utfyllnadsdata inte kan fastställas exakt är det en bra idé att postlängden matchar längden på de data som läss.

  • Om variabeln som läse in är en sträng läser som standard FileGetObject en tvåbytesbeskrivning som innehåller stränglängden och läser sedan de data som går in i variabeln. Därför måste postlängden RecordLength som anges av -satsen i FileOpen funktionen vara minst två byte större än strängens faktiska längd. Visual Basic 6.0 och tidigare versioner stöder strängar med fast längd och vid läsning till en fil skrivs inte längdbeskrivningen. Om du vill läsa en sträng utan beskrivningen bör du skicka True till parametern StringIsFixedLength och strängen som du läser in ska vara rätt längd.

  • Om variabeln som läse in i är en matris måste postlängden som anges av parametern RecordLength i FileOpen funktionen vara större än eller lika med summan av alla byte som krävs för att skriva matrisdata och matrisbeskrivningen. Beskrivningen anger matrisens rangordning, storlek och de lägre gränserna för varje rangordning. Dess längd är lika med 2 plus 8 gånger antalet dimensioner: 2 + 8 * NumberOfDimensions.

    Följande matrisdeklaration kräver till exempel 218 byte när matrisen skrivs till disk:

    Dim MyArray(4, 9) As Integer
    

    De 218 byteen distribueras på följande sätt: 18 byte för beskrivningen (2 + 8 * 2) och 100 byte för data (5 * 10 * 4).

  • FileGetObject läser element i strukturer som om var och en lästes individuellt, förutom att det inte finns någon utfyllnad mellan element. På disken prefixeras en dynamisk matris i en användardefinierad typ (skriven med ) av en deskriptor vars längd är lika med FilePutObject2 plus 8 gånger antalet dimensioner: 2 + 8 * NumberOfDimensions. Postlängden RecordLength som anges av -satsen i FileOpen funktionen måste vara större än eller lika med summan av alla byte som krävs för att läsa de enskilda elementen, inklusive alla matriser och deras beskrivningar. Klassen VBFixedStringAttribute kan tillämpas på strängfält i strukturerna för att ange storleken på strängen när den skrivs till disk.

Binärt läge

För filer som öppnas i Binary läge gäller alla Random regler, med följande undantag:

  • RecordLength Satsen i FileOpen funktionen har ingen effekt. FileGetObject läser alla variabler från disken sammanhängande, dvs. utan utfyllnad mellan poster.

  • För alla andra matriser än en matris i en struktur läser FileGetObject endast data. Ingen deskriptor har lästs.

FileGetObject läser strängar med variabel längd som inte är element i strukturer utan att förvänta sig två bytes längdbeskrivning. Antalet lästa byte är lika med antalet tecken som redan finns i strängen.

Important

När du läser från filer ska du inte fatta beslut om innehållet i en fil baserat på filnamnstillägget. En fil med namnet Form1.vb kanske till exempel inte är en Visual Basic källfil.

Gäller för

Se även