Udostępnij za pośrednictwem


FileSystem.FilePutObject(Int32, Object, Int64) Metoda

Definicja

Zapisuje dane ze zmiennej do pliku na dysku. Ta My funkcja zapewnia lepszą produktywność i wydajność operacji we/wy plików niż FilePutObject. Aby uzyskać więcej informacji, zobacz FileSystem.

public static void FilePutObject (int FileNumber, object Value, long RecordNumber = -1);
static member FilePutObject : int * obj * int64 -> unit
Public Sub FilePutObject (FileNumber As Integer, 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, która zawiera dane zapisane na dysku.

RecordNumber
Int64

Opcjonalny. Liczba rekordów (Random pliki trybu) lub liczba bajtów (Binary pliki trybu), w których rozpoczyna się zapisywanie.

Przykłady

W tym przykładzie użyto FilePutObject funkcji do zapisania ciągu do pliku.

Sub WriteData()
    Dim text As String = "test"
    FileOpen(1, "test.bin", OpenMode.Binary)
    FilePutObject(1, text)
    FileClose(1)
End Sub

Uwagi

Funkcja FilePutObject jest używana zamiast FilePut unikać niejednoznaczności w czasie kompilacji, jeśli typ Object jest przekazywany zamiast innego typu, takiego jak Integer, Long, Shorti tak dalej.

FilePutObject zapisuje i odczytuje deskryptory opisujące obiekt. Jeśli zamierzasz napisać Variant typ, FilePutObject jest wymagany. W razie wątpliwości, jeśli używasz obiektu dla drugiego parametru, zalecamy, aby zawsze używać FilePutObject parametru i FileGetObject.

FilePutObject jest prawidłowy tylko w Random trybie i Binary .

Dane zapisywane FilePutObject za pomocą polecenia są zwykle odczytywane z pliku przy użyciu polecenia FileGetObject.

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, FilePutObject zapisuje następny rekord lub bajt po ostatnim FileGetObject lub FilePutObject funkcji (albo rekord lub bajt wskazywany przez ostatnią Seek funkcję).

Argument StringIsFixedLength określa, czy funkcja interpretuje ciągi jako zmienną, czy stałą długość. FilePutObject nie zapisuje deskryptora długości, gdy argument ma wartość True. Jeśli używasz polecenia StringIsFixedLength = True z FilePutObjectprogramem , musisz wykonać to samo z elementem FileGetObject, a także upewnić się, że ciąg jest inicjowany do oczekiwanej długości.

Tryb losowy

W przypadku plików otwartych w Random trybie obowiązują następujące reguły:

  • Jeśli długość zapisywanych danych jest mniejsza niż długość określona w RecordLength klauzuli FileOpen funkcji, FilePutObject zapisuje kolejne rekordy na granicach długości rekordu. Odstęp między końcem jednego rekordu a początkiem następnego rekordu jest wypełniany istniejącą zawartością buforu plików. Ponieważ ilość danych dopełniania nie może być dokładnie określona, zazwyczaj dobrym pomysłem jest, aby długość rekordu była zgodna z długością zapisywanych danych. Jeśli długość zapisywanych danych jest większa niż długość określona w RecordLength klauzuli FileOpen funkcji, zgłaszany jest wyjątek.

  • Jeśli zapisywana zmienna jest obiektem zawierającym typ liczbowy, FilePutObject zapisuje dwie bajty identyfikujące VarType obiekt, a następnie zapisuje zmienną. Na przykład podczas pisania obiektu zawierającego liczbę całkowitą FilePutObject zapisuje sześć bajtów: dwa bajty identyfikujące obiekt jako VarType(3) (Integer) i cztery bajty zawierające dane. Długość rekordu określona RecordLength przez parametr w FileOpen funkcji musi być co najmniej dwie bajty większe niż rzeczywista liczba bajtów wymaganych do przechowywania zmiennej.

  • Jeśli zapisywana zmienna jest obiektem zawierającym ciąg, FilePutObject zapisuje deskryptor dwu bajtowy identyfikujący VarType(8) obiekt, deskryptor dwu bajtowy wskazujący długość ciągu, a następnie zapisuje dane ciągu. Długość rekordu RecordLength określona przez parametr w FileOpen funkcji musi wynosić co najmniej cztery bajty większe niż rzeczywista długość ciągu. Jeśli chcesz umieścić ciąg bez deskryptora, należy przekazać True go do parametru StringIsFixedLength , a odczytany ciąg powinien mieć prawidłową długość.

  • Jeśli zapisywana zmienna jest tablicą, długość rekordu określona przez RecordLength klauzulę 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 * LiczbaOfDimensions).

Tryb binarny

W przypadku plików otwartych w Binary trybie obowiązują wszystkie Random reguły trybu, z wyjątkiem:

  • Klauzula RecordLengthFileOpen w funkcji nie ma wpływu. FilePutObject zapisuje wszystkie zmienne na dysku stale, czyli bez dopełniania między rekordami.

Dotyczy

Zobacz też