FileSystem.FileGetObject(Int32, Object, Int64) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wczytuje dane z otwartego pliku dysku do zmiennej. Ta My
funkcja zapewnia lepszą produktywność i wydajność operacji we/wy plików niż FileGetObject
. Aby uzyskać więcej informacji, zobacz 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)
Parametry
- FileNumber
- Int32
Wymagane. Dowolna prawidłowa liczba plików.
- Value
- Object
Wymagane. Prawidłowa nazwa zmiennej, do której wczytywane są dane.
- RecordNumber
- Int64
Opcjonalny. Liczba rekordów (Random
pliki trybu) lub liczba bajtów (Binary
pliki trybu), w których rozpoczyna się odczytywanie.
Przykłady
Poniższy przykład odczytuje rekord do pliku testowego, a następnie pobiera go.
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)
Uwagi
Funkcja FileGetObject
jest używana zamiast FileGet
unikać niejednoznaczności w czasie kompilacji, jeśli typ Object
jest zwracany zamiast innego typu, takiego jak Integer
, Long
, Short
i tak dalej.
Jeśli zamierzasz napisać Variant
typ, FileGetObject
jest wymagany. W razie wątpliwości, jeśli używasz obiektu dla drugiego parametru, zawsze zaleca się użycie FilePutObject
parametru i FileGetObject
.
FileGetObject
jest prawidłowy tylko w Random
trybie i Binary
.
Dane odczytywane przy użyciu FileGetObject
są zwykle zapisywane za pomocą polecenia FilePutObject
.
Pierwszy rekord lub bajt w pliku znajduje się na pozycji 1, drugi rekord lub bajt na pozycji 2 i tak dalej. Jeśli pominięto RecordNumber
, FileGetObject
odczytuje rekord lub bajt po ostatnim FileGetObject
lub FilePutObject
funkcji (lub wskazuje na to ostatnia Seek
funkcja).
Tryb losowy
W przypadku plików otwartych w Random
trybie obowiązują następujące reguły:
Jeśli długość odczytywanych danych jest mniejsza niż długość określona w
RecordLength
klauzuliFileOpen
funkcji,FileGetObject
odczytuje kolejne rekordy na granicach długości rekordu. Odstęp między końcem jednego rekordu a początkiem następnego rekordu jest dopełniany istniejącą zawartością buforu pliku. Ponieważ ilość danych dopełniania nie może być dokładnie określona, dobrym pomysłem jest, aby długość rekordu była zgodna z długością odczytywanych danych.Jeśli zmienna odczytywana do elementu jest ciągiem, domyślnie
FileGetObject
odczytuje deskryptor dwu bajtowy zawierający długość ciągu, a następnie odczytuje dane, które przechodzą do zmiennej. W związku z tym długość rekorduFileOpen
określona przezRecordLength
klauzulę funkcji musi być co najmniej dwie bajty większe niż rzeczywista długość ciągu. Visual Basic 6.0 i starsze wersje obsługują ciągi o stałej długości, a w przypadku odczytu do pliku deskryptor długości nie jest zapisywany. Jeśli chcesz odczytać ciąg bez deskryptora, należy przekazaćTrue
go do parametruStringIsFixedLength
, a odczytany ciąg powinien mieć prawidłową długość.Jeśli zmienna odczytywana w systemie jest tablicą, długość rekordu określona przez
RecordLength
parametr wFileOpen
funkcji musi być większa lub równa sumie wszystkich bajtów wymaganych do zapisania danych tablicy i deskryptora tablicy. Deskryptor określa rangę tablicy, rozmiar i dolne granice dla każdej rangi. Jego długość wynosi 2 plus 8 razy więcej wymiarów: 2 + 8 * NumberOfDimensions.Na przykład następująca deklaracja tablicy wymaga 218 bajtów, gdy tablica jest zapisywana na dysku:
Dim MyArray(4, 9) As Integer
218 bajtów są dystrybuowane w następujący sposób: 18 bajtów deskryptora (2 + 8 * 2) i 100 bajtów dla danych (5 * 10 * 4).
FileGetObject
odczytuje elementy struktur tak, jakby były odczytywane indywidualnie, z tą różnicą, że nie ma dopełniania między elementami. Na dysku tablica dynamiczna w typie zdefiniowanym przez użytkownika (napisanymFilePutObject
przy użyciu ) jest poprzedzona deskryptorem, którego długość wynosi 2 plus 8 razy więcej wymiarów: 2 + 8 * NumberOfDimensions. Długość rekordu określona przez klauzulęRecordLength
wFileOpen
funkcji musi być większa lub równa sumie wszystkich bajtów wymaganych do odczytania poszczególnych elementów, w tym wszystkich tablic i deskryptorów. Klasę VBFixedStringAttribute można zastosować do pól ciągów w strukturach, aby wskazać rozmiar ciągu podczas zapisywania na dysku.
Tryb binarny
W przypadku plików otwartych w Binary
trybie Random
wszystkie reguły mają zastosowanie z następującymi wyjątkami:
Klauzula
RecordLength
FileOpen
w funkcji nie ma wpływu.FileGetObject
odczytuje wszystkie zmienne z dysku stale, czyli bez dopełniania między rekordami.W przypadku dowolnej tablicy innej niż tablica w strukturze
FileGetObject
odczytuje tylko dane. Deskryptor nie jest odczytywany.
FileGetObject
odczytuje ciągi o zmiennej długości, które nie są elementami struktur bez oczekiwania deskryptora o długości dwóch bajtów. Liczba bajtów odczytanych jest równa liczbie znaków znajdujących się już w ciągu.
Ważne
Podczas odczytu z plików, nie należy podejmować decyzji dotyczących zawartości pliku na podstawie rozszerzenia nazwy pliku. Na przykład plik o nazwie Form1.vb może nie być plikiem źródłowym języka Visual Basic.