FileSystem.FileGetObject(Int32, Object, Int64) Metoda

Definice

Čte data z otevřeného souboru disku do proměnné. Tato My funkce poskytuje lepší produktivitu a výkon při vstupně-výstupních operacích souborů než FileGetObject. Další informace najdete na webu FileSystem.

[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The target object type could not be statically analyzed and may be trimmed")]
public static void FileGetObject(int FileNumber, ref object Value, long RecordNumber = -1);
public static void FileGetObject(int FileNumber, ref object Value, long RecordNumber = -1);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The target object type could not be statically analyzed and may be trimmed")>]
static member FileGetObject : int * obj * int64 -> unit
static member FileGetObject : int * obj * int64 -> unit
Public Sub FileGetObject (FileNumber As Integer, ByRef Value As Object, Optional RecordNumber As Long = -1)

Parametry

FileNumber
Int32

Required. Libovolné platné číslo souboru.

Value
Object

Required. Platný název proměnné, do kterého se data čtou.

RecordNumber
Int64

Optional. Číslo záznamu (Random soubory režimu) nebo bajtové číslo (Binary soubory režimu), na kterých se začíná čtení.

Atributy

Příklady

Následující příklad načte záznam do testovacího souboru a pak ho načte.

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)

Poznámky

Funkce FileGetObject se používá místo FileGet toho, aby se zabránilo nejednoznačnostem v době kompilace, pokud je typ Object vrácen místo jiného typu, například Integer, , LongShorta tak dále.

Pokud chcete typ Variant napsat, FileGetObject je nutné. Pokud máte pochybnosti, pokud používáte objekt pro druhý parametr, je vždy doporučeno, abyste použili FilePutObject a FileGetObject.

FileGetObject je platný pouze v Random režimu a Binary v režimu.

Čtení dat se FileGetObject obvykle zapisuje pomocí FilePutObject.

První záznam nebo bajt v souboru je na pozici 1, druhý záznam nebo bajt je na pozici 2 atd. Pokud vynecháte RecordNumber, FileGetObject přečte záznam nebo bajt za poslední FileGetObjectFilePutObject nebo funkcí (nebo odkazuje na poslední Seek funkci).

Náhodný režim

Pro soubory otevřené v Random režimu platí následující pravidla:

  • Pokud je délka přečtených dat menší než délka zadaná v RecordLength klauzuli FileOpen funkce, FileGetObject přečte další záznamy o hranicích délky záznamů. Mezera mezi koncem jednoho záznamu a začátkem dalšího záznamu je vyplněna existujícím obsahem vyrovnávací paměti souboru. Vzhledem k tomu, že množství odsazení dat nelze přesně určit, je vhodné, aby délka záznamu odpovídala délce čtení dat.

  • Pokud je proměnná přečtená do řetězce, ve výchozím nastavení FileGetObject přečte dvoubajtů popisovač obsahující délku řetězce a pak přečte data, která do proměnné přejdou. Délka záznamu zadaná RecordLength klauzulí FileOpen funkce proto musí být alespoň dva bajty větší než skutečná délka řetězce. Visual Basic verze 6.0 a starší verze podporují řetězce s pevnou délkou a při čtení do souboru není popisovač délky zapsán. Pokud chcete přečíst řetězec bez popisovače, měli TrueStringIsFixedLength byste předat parametru a řetězec, do kterého jste načetli, by měl mít správnou délku.

  • Pokud je proměnná přečtená do pole, musí být délka záznamu určená parametrem RecordLength ve FileOpen funkci větší nebo rovna součtu všech bajtů potřebných k zápisu dat pole a popisovače pole. Popisovač určuje pořadí pole, velikost a dolní mez pro každé pořadí. Jeho délka se rovná 2 plus 8násobek počtu dimenzí: 2 + 8 * NumberOfDimensions.

    Například následující deklarace pole vyžaduje při zápisu pole na disk 218 bajtů:

    Dim MyArray(4, 9) As Integer
    

    218 bajtů se distribuuje takto: 18 bajtů pro popisovač (2 + 8 * 2) a 100 bajtů pro data (5 * 10 * 4).

  • FileGetObject čte prvky struktur, jako by se každý četl jednotlivě, s tím rozdílem, že mezi prvky neexistuje odsazení. Na disku je dynamické pole v uživatelem definovaném typu (napsané pomocí FilePutObject) předponou popisovače, jehož délka se rovná 2 plus 8násobek počtu dimenzí: 2 + 8 * NumberOfDimensions. Délka záznamu RecordLength zadaná klauzulí ve FileOpen funkci musí být větší nebo rovna součtu všech bajtů potřebných ke čtení jednotlivých prvků, včetně všech polí a jejich popisovačů. Třídu VBFixedStringAttribute lze použít u řetězcových polí ve strukturách, aby se při zápisu na disk označí velikost řetězce.

Binární režim

U souborů otevřených v Binary režimu platí všechna Random pravidla s těmito výjimkami:

  • Klauzule RecordLength ve FileOpen funkci nemá žádný vliv. FileGetObject čte všechny proměnné z disku souvisle, tj. bez odsazení mezi záznamy.

  • U libovolného pole jiného než pole ve struktuře FileGetObject čte pouze data. Nečte se žádný popisovač.

FileGetObject přečte řetězce s proměnnou délkou, které nejsou prvky struktur bez očekávání popisovače dvoubajtů délky. Počet přečtených bajtů se rovná počtu znaků, které už v řetězci jsou.

Important

Při čtení ze souborů se nerozhodujte o obsahu souboru na základě přípony názvu souboru. Například soubor s názvem Form1.vb nemusí být zdrojovým souborem Visual Basic.

Platí pro

Viz také