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, Shorti 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
RecordLengthklauzuliFileOpenfunkcji,FileGetObjectodczytuje 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
FileGetObjectodczytuje 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ść rekorduFileOpenokreślona przezRecordLengthklauzulę 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ćTruego 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
RecordLengthparametr wFileOpenfunkcji 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 Integer218 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).
FileGetObjectodczytuje 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 (napisanymFilePutObjectprzy 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ęRecordLengthwFileOpenfunkcji 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
RecordLengthFileOpenw funkcji nie ma wpływu.FileGetObjectodczytuje wszystkie zmienne z dysku stale, czyli bez dopełniania między rekordami.W przypadku dowolnej tablicy innej niż tablica w strukturze
FileGetObjectodczytuje 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.