Udostępnij za pośrednictwem


FileSystem.FileGetObject(Int32, Object, Int64) Metoda

Definicja

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 RecordLength klauzuli FileOpen 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ść rekordu FileOpen określona przez RecordLength 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 parametru StringIsFixedLength , 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 w FileOpen 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 (napisanym FilePutObjectprzy 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 w FileOpen 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 RecordLengthFileOpen 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.

Dotyczy

Zobacz też