FileSystem.FilePutObject(Int32, Object, Int64) Metoda

Definicja

Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność 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

To jest wymagane. Dowolny prawidłowy numer pliku.

Value
Object

To jest wymagane. Prawidłowa nazwa zmiennej, która zawiera dane zapisane na dysku.

RecordNumber
Int64

Optional. 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 w 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 zapisać 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.

FilePutObjectjest 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 znajduje się na pozycji 2 itd. RecordNumberJeśli pominięto , FilePutObject zapisuje następny rekord lub bajt po ostatniej FileGetObject funkcji lub FilePutObject funkcji (albo rekord lub bajt wskazywany przez ostatnią Seek funkcję).

StringIsFixedLength Argument określa, czy funkcja interpretuje ciągi jako zmienne, czy stałą długość. FilePutObject nie zapisuje deskryptora długości, gdy argument ma wartość True. Jeśli używasz polecenia StringIsFixedLength = True z elementem FilePutObject, musisz wykonać to samo z elementem FileGetObjecti musisz również 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 w granicach długości rekordu. Odstęp między końcem jednego rekordu a rozpoczęciem następnego rekordu jest dopełniany istniejącą zawartością buforu pliku. Ponieważ nie można dokładnie określić ilości danych dopełnienia, 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 dwa 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 RecordLength określona przez parametr w FileOpen funkcji musi wynosić co najmniej dwa 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 być prawidłową długością.

  • 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 zapisu 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).

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 uzupełniania między rekordami.

Dotyczy

Zobacz też