FileSystem.FileGetObject(Int32, Object, Int64) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Č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
RecordLengthklauzuliFileOpenfunkce,FileGetObjectpř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í
FileGetObjectpř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áRecordLengthklauzulíFileOpenfunkce 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ěliTrueStringIsFixedLengthbyste 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
RecordLengthveFileOpenfunkci 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 Integer218 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áznamuRecordLengthzadaná klauzulí veFileOpenfunkci 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
RecordLengthveFileOpenfunkci 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.