FileSystem.FilePut 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.
Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność i wydajność operacji we/wy plików niż FilePut. F Aby uzyskać więcej informacji, zobacz FileSystem.
Przeciążenia
| Nazwa | Opis |
|---|---|
| FilePut(Int32, Int64, Int64) |
Zapisuje dane ze zmiennej do pliku dysku. Ta |
| FilePut(Int32, String, Int64, Boolean) |
Zapisuje dane ze zmiennej do pliku dysku. Ta |
| FilePut(Object, Object, Object) |
Przestarzałe.
Przestarzałe.
Zapisuje dane ze zmiennej do pliku dysku. Ta |
| FilePut(Int32, ValueType, Int64) |
Zapisuje dane ze zmiennej do pliku dysku. Ta |
| FilePut(Int32, Single, Int64) |
Zapisuje dane ze zmiennej do pliku dysku. Ta |
| FilePut(Int32, Int32, Int64) |
Zapisuje dane ze zmiennej do pliku dysku. Ta |
| FilePut(Int32, Array, Int64, Boolean, Boolean) |
Zapisuje dane ze zmiennej do pliku dysku. Ta |
| FilePut(Int32, Double, Int64) |
Zapisuje dane ze zmiennej do pliku dysku. Ta |
| FilePut(Int32, Decimal, Int64) |
Zapisuje dane ze zmiennej do pliku dysku. Ta |
| FilePut(Int32, DateTime, Int64) |
Zapisuje dane ze zmiennej do pliku dysku. Ta |
| FilePut(Int32, Char, Int64) |
Zapisuje dane ze zmiennej do pliku dysku. Ta |
| FilePut(Int32, Byte, Int64) |
Zapisuje dane ze zmiennej do pliku dysku. Ta |
| FilePut(Int32, Boolean, Int64) |
Zapisuje dane ze zmiennej do pliku dysku. Ta |
| FilePut(Int32, Int16, Int64) |
Zapisuje dane ze zmiennej do pliku dysku. Ta |
FilePut(Int32, Int64, Int64)
Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność i wydajność operacji we/wy plików niż FilePut. Aby uzyskać więcej informacji, zobacz FileSystem.
public static void FilePut(int FileNumber, long Value, long RecordNumber = -1);
static member FilePut : int * int64 * int64 -> unit
Public Sub FilePut (FileNumber As Integer, Value As Long, Optional RecordNumber As Long = -1)
Parametry
- FileNumber
- Int32
To jest wymagane. Dowolny prawidłowy numer pliku.
- Value
- Int64
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.
Wyjątki
RecordNumber
< 1 i nie równe -1.
Tryb pliku jest nieprawidłowy.
Przykłady
W tym przykładzie użyto funkcji do zapisywania FilePut danych w pliku. Pięć rekordów struktury Person jest zapisywanych w pliku.
Structure Person
Public ID As Integer
Public Name As String
End Structure
Sub WriteData()
Dim PatientRecord As Person
Dim recordNumber As Integer
' Open file for random access.
FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary)
' Loop 5 times.
For recordNumber = 1 To 5
' Define ID.
PatientRecord.ID = recordNumber
' Create a string.
PatientRecord.Name = "Name " & recordNumber
' Write record to file.
FilePut(1, PatientRecord)
Next recordNumber
FileClose(1)
End Sub
Uwagi
FilePutjest prawidłowy tylko w Random trybie i .Binary
Dane zapisywane FilePut za pomocą polecenia są zwykle odczytywane z pliku przy użyciu polecenia FileGet.
Pierwszy rekord lub bajt w pliku znajduje się na pozycji 1, drugi rekord lub bajt znajduje się na pozycji 2 itd. Jeśli pominięto RecordNumber, zostanie zapisany następny rekord lub bajt po ostatniej FileGet funkcji lub FilePut wskazywany przez ostatnią Seek funkcję.
StringIsFixedLength Argument określa, czy funkcja interpretuje ciągi jako zmienne, czy stałą długość.
FilePut nie zapisuje deskryptora długości, gdy argument ma wartość True. Jeśli używasz polecenia StringIsFixedLength = True z elementem FilePut, musisz wykonać to samo z elementem FileGeti musisz 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
RecordLengthklauzuliFileOpenfunkcji,FilePutzapisuje 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 określić ilości danych uzupełniania z pewnością, 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 wRecordLengthklauzuliFileOpenfunkcji, zostanie zgłoszony wyjątek.Jeśli zapisywana zmienna jest ciągiem,
FilePutzapisuje deskryptor dwu bajtowy zawierający długość ciągu, a następnie zapisuje dane, które przechodzą do zmiennej. W związku z tym długość rekordu określona przez klauzulęRecordLengthwFileOpenfunkcji musi wynosić co najmniej dwa bajty większe niż rzeczywista długość ciągu.Jeśli zapisywana zmienna jest obiektem zawierającym typ liczbowy,
FilePutzapisuje dwa bajty identyfikująceVarTypeobiekt, a następnie zapisuje zmienną. Na przykład podczas pisania obiektu zawierającego liczbę całkowitąFilePutzapisuje sześć bajtów: dwa bajty identyfikujące obiekt jakoVarType(3)(Integer) i cztery bajty zawierające dane. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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,
FilePutzapisuje deskryptor dwu bajtowy identyfikującyVarType(8)obiekt, deskryptor dwu bajtowy wskazujący długość ciągu, a następnie zapisuje dane ciągu. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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ćTruego do parametruStringIsFixedLength, a odczytany ciąg powinien być prawidłową długością.Jeśli zapisywana zmienna jest tablicą, możesz wybrać, czy napisać deskryptor dla rozmiaru i wymiarów tablicy. Visual Basic 6.0 i starszych wersjach zapisują deskryptor plików dla tablicy dynamicznej, ale nie dla tablicy o stałym rozmiarze. Visual Basic 2005 domyślnie nie zapisuje deskryptora. Aby napisać deskryptor, ustaw
ArrayIsDynamicparametr naTruewartość . Podczas zapisywania tablicy należy dopasować sposób odczytywania tablicy; jeśli zostanie odczytany za pomocą deskryptora, musisz napisać deskryptor. 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). Długość rekorduRecordLengthokreślona przez klauzulę wFileOpenfunkcji musi być większa lub równa sumie wszystkich bajtów wymaganych do zapisania danych tablicy i deskryptora tablicy. Na przykład następująca deklaracja tablicy wymaga 218 bajtów, gdy tablica jest zapisywana na dysku.Dim MyArray(4, 9) As IntegerJeśli zapisywana zmienna jest dowolnym innym typem zmiennej (a nie ciągiem o zmiennej długości lub obiektem),
FilePutzapisuje tylko dane zmiennych. Długość rekordu określona przez klauzulęRecordLengthFileOpenw funkcji musi być większa lub równa długości zapisywanych danych.FilePutzapisuje elementy struktur tak, jakby zostały napisane indywidualnie, z wyjątkiem braku wypełnienia między elementami. AtrybutVBFixedStringmożna zastosować do pól ciągów w strukturach, aby wskazać rozmiar ciągu podczas zapisywania na dysku.Note
Pola ciągów, które mają więcej bajtów niż określony przez
VBFixedStringatrybut, są obcinane podczas zapisywania na dysku,
Tryb binarny
W przypadku plików otwartych w Binary trybie większość Random reguł trybu ma zastosowanie z pewnymi wyjątkami. Następujące reguły dotyczące plików otwartych w Binary trybie różnią się od reguł trybu Random :
Klauzula
RecordLengthFileOpenw funkcji nie ma wpływu.FilePutzapisuje wszystkie zmienne na dysku stale, czyli bez uzupełniania między rekordami.W przypadku dowolnej tablicy innej niż tablica w strukturze
FilePutzapisuje tylko dane. Deskryptor nie jest zapisywany.FilePutzapisuje ciągi o zmiennej długości, które nie są elementami struktur bez deskryptora długości dwu bajtów. Liczba zapisanych bajtów jest równa liczbie znaków w ciągu. Na przykład następujące instrukcje zapisują 11 bajtów do pliku o numerze 1:Dim hellow As String = "Hello World" FilePut(1, hellow)Zapisywanie w pliku przy użyciu
FilePutfunkcji wymagaWritedostępu z wyliczenia FileIOPermissionAccess .
Zobacz też
- FileGet
- FileOpen(Int32, String, OpenMode, OpenAccess, OpenShare, Int32)
- Seek
- FileGetObject(Int32, Object, Int64)
- VBFixedStringAttribute
- Len(UInt16)
- ArgumentException
- IOException
- Writing to Files in Visual Basic
Dotyczy
FilePut(Int32, String, Int64, Boolean)
Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność i wydajność operacji we/wy plików niż FilePut. Aby uzyskać więcej informacji, zobacz FileSystem.
public static void FilePut(int FileNumber, string Value, long RecordNumber = -1, bool StringIsFixedLength = false);
static member FilePut : int * string * int64 * bool -> unit
Public Sub FilePut (FileNumber As Integer, Value As String, Optional RecordNumber As Long = -1, Optional StringIsFixedLength As Boolean = false)
Parametry
- FileNumber
- Int32
To jest wymagane. Dowolny prawidłowy numer pliku.
- Value
- String
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.
- StringIsFixedLength
- Boolean
Optional. Dotyczy tylko podczas pisania ciągu. Określa, czy do pliku ma być zapisywany deskryptor długości ciągu dwu bajtowego. Wartość domyślna to False.
Wyjątki
RecordNumber
< 1 i nie równe -1.
Tryb pliku jest nieprawidłowy.
Przykłady
W tym przykładzie użyto funkcji do zapisywania FilePut danych w pliku. Pięć rekordów struktury Person jest zapisywanych w pliku.
Structure Person
Public ID As Integer
Public Name As String
End Structure
Sub WriteData()
Dim PatientRecord As Person
Dim recordNumber As Integer
' Open file for random access.
FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary)
' Loop 5 times.
For recordNumber = 1 To 5
' Define ID.
PatientRecord.ID = recordNumber
' Create a string.
PatientRecord.Name = "Name " & recordNumber
' Write record to file.
FilePut(1, PatientRecord)
Next recordNumber
FileClose(1)
End Sub
Uwagi
FilePutjest prawidłowy tylko w Random trybie i .Binary
Dane zapisywane FilePut za pomocą polecenia są zwykle odczytywane z pliku przy użyciu polecenia FileGet.
Pierwszy rekord lub bajt w pliku znajduje się na pozycji 1, drugi rekord lub bajt znajduje się na pozycji 2 itd. Jeśli pominięto RecordNumber, zostanie zapisany następny rekord lub bajt po ostatniej FileGet funkcji lub FilePut wskazywany przez ostatnią Seek funkcję.
StringIsFixedLength Argument określa, czy funkcja interpretuje ciągi jako zmienne, czy stałą długość.
FilePut nie zapisuje deskryptora długości, gdy argument ma wartość True. Jeśli używasz polecenia StringIsFixedLength = True z elementem FilePut, musisz wykonać to samo z elementem FileGeti musisz 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
RecordLengthklauzuliFileOpenfunkcji,FilePutzapisuje 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 określić ilości danych uzupełniania z pewnością, 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 wRecordLengthklauzuliFileOpenfunkcji, zostanie zgłoszony wyjątek.Jeśli zapisywana zmienna jest ciągiem,
FilePutzapisuje deskryptor dwu bajtowy zawierający długość ciągu, a następnie zapisuje dane, które przechodzą do zmiennej. W związku z tym długość rekordu określona przez klauzulęRecordLengthwFileOpenfunkcji musi wynosić co najmniej dwa bajty większe niż rzeczywista długość ciągu.Jeśli zapisywana zmienna jest obiektem zawierającym typ liczbowy,
FilePutzapisuje dwa bajty identyfikująceVarTypeobiekt, a następnie zapisuje zmienną. Na przykład podczas pisania obiektu zawierającego liczbę całkowitąFilePutzapisuje sześć bajtów: dwa bajty identyfikujące obiekt jakoVarType(3)(Integer) i cztery bajty zawierające dane. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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,
FilePutzapisuje deskryptor dwu bajtowy identyfikującyVarType(8)obiekt, deskryptor dwu bajtowy wskazujący długość ciągu, a następnie zapisuje dane ciągu. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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ćTruego do parametruStringIsFixedLength, a odczytany ciąg powinien być prawidłową długością.Jeśli zapisywana zmienna jest tablicą, możesz wybrać, czy napisać deskryptor dla rozmiaru i wymiarów tablicy. Visual Basic 6.0 i starszych wersjach zapisują deskryptor plików dla tablicy dynamicznej, ale nie dla tablicy o stałym rozmiarze. Visual Basic 2005 domyślnie nie zapisuje deskryptora. Aby napisać deskryptor, ustaw
ArrayIsDynamicparametr naTruewartość . Podczas zapisywania tablicy należy dopasować sposób odczytywania tablicy; jeśli zostanie odczytany za pomocą deskryptora, musisz napisać deskryptor. 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). Długość rekorduRecordLengthokreślona przez klauzulę wFileOpenfunkcji musi być większa lub równa sumie wszystkich bajtów wymaganych do zapisania danych tablicy i deskryptora tablicy. Na przykład następująca deklaracja tablicy wymaga 218 bajtów, gdy tablica jest zapisywana na dysku.Dim MyArray(4, 9) As IntegerJeśli zapisywana zmienna jest dowolnym innym typem zmiennej (a nie ciągiem o zmiennej długości lub obiektem),
FilePutzapisuje tylko dane zmiennych. Długość rekordu określona przez klauzulęRecordLengthFileOpenw funkcji musi być większa lub równa długości zapisywanych danych.FilePutzapisuje elementy struktur tak, jakby zostały napisane indywidualnie, z wyjątkiem braku wypełnienia między elementami. AtrybutVBFixedStringmożna zastosować do pól ciągów w strukturach, aby wskazać rozmiar ciągu podczas zapisywania na dysku.Note
Pola ciągów, które mają więcej bajtów niż określony przez
VBFixedStringatrybut, są obcinane podczas zapisywania na dysku,
Tryb binarny
W przypadku plików otwartych w Binary trybie większość Random reguł trybu ma zastosowanie z pewnymi wyjątkami. Następujące reguły dotyczące plików otwartych w Binary trybie różnią się od reguł trybu Random :
Klauzula
RecordLengthFileOpenw funkcji nie ma wpływu.FilePutzapisuje wszystkie zmienne na dysku stale, czyli bez uzupełniania między rekordami.W przypadku dowolnej tablicy innej niż tablica w strukturze
FilePutzapisuje tylko dane. Deskryptor nie jest zapisywany.FilePutzapisuje ciągi o zmiennej długości, które nie są elementami struktur bez deskryptora długości dwu bajtów. Liczba zapisanych bajtów jest równa liczbie znaków w ciągu. Na przykład następujące instrukcje zapisują 11 bajtów do pliku o numerze 1:Dim hellow As String = "Hello World" FilePut(1, hellow)Zapisywanie w pliku przy użyciu
FilePutfunkcji wymagaWritedostępu z wyliczenia FileIOPermissionAccess .
Zobacz też
- FileGet
- FileOpen(Int32, String, OpenMode, OpenAccess, OpenShare, Int32)
- Seek
- FileGetObject(Int32, Object, Int64)
- VBFixedStringAttribute
- Len(UInt16)
- ArgumentException
- IOException
- Writing to Files in Visual Basic
Dotyczy
FilePut(Object, Object, Object)
Uwaga
Use FilePutObject to write Object types, or coerce FileNumber and RecordNumber to Integer for writing non-Object types
Uwaga
This member has been deprecated. Please use FilePutObject to write Object types, or coerce FileNumber and RecordNumber to Integer for writing non-Object types. http://go.microsoft.com/fwlink/?linkid=14202
Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność i wydajność operacji we/wy plików niż FilePut. Aby uzyskać więcej informacji, zobacz FileSystem.
[System.Obsolete("Use FilePutObject to write Object types, or coerce FileNumber and RecordNumber to Integer for writing non-Object types")]
public static void FilePut(object FileNumber, object Value, object RecordNumber = -1);
[System.Obsolete("This member has been deprecated. Please use FilePutObject to write Object types, or coerce FileNumber and RecordNumber to Integer for writing non-Object types. http://go.microsoft.com/fwlink/?linkid=14202")]
public static void FilePut(object FileNumber, object Value, object RecordNumber = -1);
[<System.Obsolete("Use FilePutObject to write Object types, or coerce FileNumber and RecordNumber to Integer for writing non-Object types")>]
static member FilePut : obj * obj * obj -> unit
[<System.Obsolete("This member has been deprecated. Please use FilePutObject to write Object types, or coerce FileNumber and RecordNumber to Integer for writing non-Object types. http://go.microsoft.com/fwlink/?linkid=14202")>]
static member FilePut : obj * obj * obj -> unit
Public Sub FilePut (FileNumber As Object, Value As Object, Optional RecordNumber As Object = -1)
Parametry
- FileNumber
- Object
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
- Object
Optional. Liczba rekordów (Random pliki trybu) lub liczba bajtów (Binary pliki trybu), w których rozpoczyna się zapisywanie.
- Atrybuty
Wyjątki
RecordNumber
< 1 i nie równe -1.
Tryb pliku jest nieprawidłowy.
Zobacz też
- FileGet
- FileOpen(Int32, String, OpenMode, OpenAccess, OpenShare, Int32)
- Seek
- FileGetObject(Int32, Object, Int64)
- VBFixedStringAttribute
- Len(UInt16)
- ArgumentException
- IOException
- Writing to Files in Visual Basic
Dotyczy
FilePut(Int32, ValueType, Int64)
Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność i wydajność operacji we/wy plików niż FilePut. Aby uzyskać więcej informacji, zobacz FileSystem.
public static void FilePut(int FileNumber, ValueType Value, long RecordNumber = -1);
static member FilePut : int * ValueType * int64 -> unit
Public Sub FilePut (FileNumber As Integer, Value As ValueType, Optional RecordNumber As Long = -1)
Parametry
- FileNumber
- Int32
To jest wymagane. Dowolny prawidłowy numer pliku.
- Value
- ValueType
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.
Wyjątki
RecordNumber
< 1 i nie równe -1.
Tryb pliku jest nieprawidłowy.
Przykłady
W tym przykładzie użyto funkcji do zapisywania FilePut danych w pliku. Pięć rekordów struktury Person jest zapisywanych w pliku.
Structure Person
Public ID As Integer
Public Name As String
End Structure
Sub WriteData()
Dim PatientRecord As Person
Dim recordNumber As Integer
' Open file for random access.
FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary)
' Loop 5 times.
For recordNumber = 1 To 5
' Define ID.
PatientRecord.ID = recordNumber
' Create a string.
PatientRecord.Name = "Name " & recordNumber
' Write record to file.
FilePut(1, PatientRecord)
Next recordNumber
FileClose(1)
End Sub
Uwagi
FilePutjest prawidłowy tylko w Random trybie i .Binary
Dane zapisywane FilePut za pomocą polecenia są zwykle odczytywane z pliku przy użyciu polecenia FileGet.
Pierwszy rekord lub bajt w pliku znajduje się na pozycji 1, drugi rekord lub bajt znajduje się na pozycji 2 itd. Jeśli pominięto RecordNumber, zostanie zapisany następny rekord lub bajt po ostatniej FileGet funkcji lub FilePut wskazywany przez ostatnią Seek funkcję.
StringIsFixedLength Argument określa, czy funkcja interpretuje ciągi jako zmienne, czy stałą długość.
FilePut nie zapisuje deskryptora długości, gdy argument ma wartość True. Jeśli używasz polecenia StringIsFixedLength = True z elementem FilePut, musisz wykonać to samo z elementem FileGeti musisz 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
RecordLengthklauzuliFileOpenfunkcji,FilePutzapisuje 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 określić ilości danych uzupełniania z pewnością, 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 wRecordLengthklauzuliFileOpenfunkcji, zostanie zgłoszony wyjątek.Jeśli zapisywana zmienna jest ciągiem,
FilePutzapisuje deskryptor dwu bajtowy zawierający długość ciągu, a następnie zapisuje dane, które przechodzą do zmiennej. W związku z tym długość rekordu określona przez klauzulęRecordLengthwFileOpenfunkcji musi wynosić co najmniej dwa bajty większe niż rzeczywista długość ciągu.Jeśli zapisywana zmienna jest obiektem zawierającym typ liczbowy,
FilePutzapisuje dwa bajty identyfikująceVarTypeobiekt, a następnie zapisuje zmienną. Na przykład podczas pisania obiektu zawierającego liczbę całkowitąFilePutzapisuje sześć bajtów: dwa bajty identyfikujące obiekt jakoVarType(3)(Integer) i cztery bajty zawierające dane. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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,
FilePutzapisuje deskryptor dwu bajtowy identyfikującyVarType(8)obiekt, deskryptor dwu bajtowy wskazujący długość ciągu, a następnie zapisuje dane ciągu. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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ćTruego do parametruStringIsFixedLength, a odczytany ciąg powinien być prawidłową długością.Jeśli zapisywana zmienna jest tablicą, możesz wybrać, czy napisać deskryptor dla rozmiaru i wymiarów tablicy. Visual Basic 6.0 i starszych wersjach zapisują deskryptor plików dla tablicy dynamicznej, ale nie dla tablicy o stałym rozmiarze. Visual Basic 2005 domyślnie nie zapisuje deskryptora. Aby napisać deskryptor, ustaw
ArrayIsDynamicparametr naTruewartość . Podczas zapisywania tablicy należy dopasować sposób odczytywania tablicy; jeśli zostanie odczytany za pomocą deskryptora, musisz napisać deskryptor. 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). Długość rekorduRecordLengthokreślona przez klauzulę wFileOpenfunkcji musi być większa lub równa sumie wszystkich bajtów wymaganych do zapisania danych tablicy i deskryptora tablicy. Na przykład następująca deklaracja tablicy wymaga 218 bajtów, gdy tablica jest zapisywana na dysku.Dim MyArray(4, 9) As IntegerJeśli zapisywana zmienna jest dowolnym innym typem zmiennej (a nie ciągiem o zmiennej długości lub obiektem),
FilePutzapisuje tylko dane zmiennych. Długość rekordu określona przez klauzulęRecordLengthFileOpenw funkcji musi być większa lub równa długości zapisywanych danych.FilePutzapisuje elementy struktur tak, jakby zostały napisane indywidualnie, z wyjątkiem braku wypełnienia między elementami. AtrybutVBFixedStringmożna zastosować do pól ciągów w strukturach, aby wskazać rozmiar ciągu podczas zapisywania na dysku.Note
Pola ciągów, które mają więcej bajtów niż określony przez
VBFixedStringatrybut, są obcinane podczas zapisywania na dysku,
Tryb binarny
W przypadku plików otwartych w Binary trybie większość Random reguł trybu ma zastosowanie z pewnymi wyjątkami. Następujące reguły dotyczące plików otwartych w Binary trybie różnią się od reguł trybu Random :
Klauzula
RecordLengthFileOpenw funkcji nie ma wpływu.FilePutzapisuje wszystkie zmienne na dysku stale, czyli bez uzupełniania między rekordami.W przypadku dowolnej tablicy innej niż tablica w strukturze
FilePutzapisuje tylko dane. Deskryptor nie jest zapisywany.FilePutzapisuje ciągi o zmiennej długości, które nie są elementami struktur bez deskryptora długości dwu bajtów. Liczba zapisanych bajtów jest równa liczbie znaków w ciągu. Na przykład następujące instrukcje zapisują 11 bajtów do pliku o numerze 1:Dim hellow As String = "Hello World" FilePut(1, hellow)Zapisywanie w pliku przy użyciu
FilePutfunkcji wymagaWritedostępu z wyliczenia FileIOPermissionAccess .
Zobacz też
- FileGet
- FileOpen(Int32, String, OpenMode, OpenAccess, OpenShare, Int32)
- Seek
- FileGetObject(Int32, Object, Int64)
- VBFixedStringAttribute
- Len(UInt16)
- ArgumentException
- IOException
- Writing to Files in Visual Basic
Dotyczy
FilePut(Int32, Single, Int64)
Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność i wydajność operacji we/wy plików niż FilePut. Aby uzyskać więcej informacji, zobacz FileSystem.
public static void FilePut(int FileNumber, float Value, long RecordNumber = -1);
static member FilePut : int * single * int64 -> unit
Public Sub FilePut (FileNumber As Integer, Value As Single, Optional RecordNumber As Long = -1)
Parametry
- FileNumber
- Int32
To jest wymagane. Dowolny prawidłowy numer pliku.
- Value
- Single
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.
Wyjątki
RecordNumber
< 1 i nie równe -1.
Tryb pliku jest nieprawidłowy.
Przykłady
W tym przykładzie użyto funkcji do zapisywania FilePut danych w pliku. Pięć rekordów struktury Person jest zapisywanych w pliku.
Structure Person
Public ID As Integer
Public Name As String
End Structure
Sub WriteData()
Dim PatientRecord As Person
Dim recordNumber As Integer
' Open file for random access.
FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary)
' Loop 5 times.
For recordNumber = 1 To 5
' Define ID.
PatientRecord.ID = recordNumber
' Create a string.
PatientRecord.Name = "Name " & recordNumber
' Write record to file.
FilePut(1, PatientRecord)
Next recordNumber
FileClose(1)
End Sub
Uwagi
FilePutjest prawidłowy tylko w Random trybie i .Binary
Dane zapisywane FilePut za pomocą polecenia są zwykle odczytywane z pliku przy użyciu polecenia FileGet.
Pierwszy rekord lub bajt w pliku znajduje się na pozycji 1, drugi rekord lub bajt znajduje się na pozycji 2 itd. Jeśli pominięto RecordNumber, zostanie zapisany następny rekord lub bajt po ostatniej FileGet funkcji lub FilePut wskazywany przez ostatnią Seek funkcję.
StringIsFixedLength Argument określa, czy funkcja interpretuje ciągi jako zmienne, czy stałą długość.
FilePut nie zapisuje deskryptora długości, gdy argument ma wartość True. Jeśli używasz polecenia StringIsFixedLength = True z elementem FilePut, musisz wykonać to samo z elementem FileGeti musisz 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
RecordLengthklauzuliFileOpenfunkcji,FilePutzapisuje 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 określić ilości danych uzupełniania z pewnością, 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 wRecordLengthklauzuliFileOpenfunkcji, zostanie zgłoszony wyjątek.Jeśli zapisywana zmienna jest ciągiem,
FilePutzapisuje deskryptor dwu bajtowy zawierający długość ciągu, a następnie zapisuje dane, które przechodzą do zmiennej. W związku z tym długość rekordu określona przez klauzulęRecordLengthwFileOpenfunkcji musi wynosić co najmniej dwa bajty większe niż rzeczywista długość ciągu.Jeśli zapisywana zmienna jest obiektem zawierającym typ liczbowy,
FilePutzapisuje dwa bajty identyfikująceVarTypeobiekt, a następnie zapisuje zmienną. Na przykład podczas pisania obiektu zawierającego liczbę całkowitąFilePutzapisuje sześć bajtów: dwa bajty identyfikujące obiekt jakoVarType(3)(Integer) i cztery bajty zawierające dane. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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,
FilePutzapisuje deskryptor dwu bajtowy identyfikującyVarType(8)obiekt, deskryptor dwu bajtowy wskazujący długość ciągu, a następnie zapisuje dane ciągu. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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ćTruego do parametruStringIsFixedLength, a odczytany ciąg powinien być prawidłową długością.Jeśli zapisywana zmienna jest tablicą, możesz wybrać, czy napisać deskryptor dla rozmiaru i wymiarów tablicy. Visual Basic 6.0 i starszych wersjach zapisują deskryptor plików dla tablicy dynamicznej, ale nie dla tablicy o stałym rozmiarze. Visual Basic 2005 domyślnie nie zapisuje deskryptora. Aby napisać deskryptor, ustaw
ArrayIsDynamicparametr naTruewartość . Podczas zapisywania tablicy należy dopasować sposób odczytywania tablicy; jeśli zostanie odczytany za pomocą deskryptora, musisz napisać deskryptor. 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). Długość rekorduRecordLengthokreślona przez klauzulę wFileOpenfunkcji musi być większa lub równa sumie wszystkich bajtów wymaganych do zapisania danych tablicy i deskryptora tablicy. Na przykład następująca deklaracja tablicy wymaga 218 bajtów, gdy tablica jest zapisywana na dysku.Dim MyArray(4, 9) As IntegerJeśli zapisywana zmienna jest dowolnym innym typem zmiennej (a nie ciągiem o zmiennej długości lub obiektem),
FilePutzapisuje tylko dane zmiennych. Długość rekordu określona przez klauzulęRecordLengthFileOpenw funkcji musi być większa lub równa długości zapisywanych danych.FilePutzapisuje elementy struktur tak, jakby zostały napisane indywidualnie, z wyjątkiem braku wypełnienia między elementami. AtrybutVBFixedStringmożna zastosować do pól ciągów w strukturach, aby wskazać rozmiar ciągu podczas zapisywania na dysku.Note
Pola ciągów, które mają więcej bajtów niż określony przez
VBFixedStringatrybut, są obcinane podczas zapisywania na dysku,
Tryb binarny
W przypadku plików otwartych w Binary trybie większość Random reguł trybu ma zastosowanie z pewnymi wyjątkami. Następujące reguły dotyczące plików otwartych w Binary trybie różnią się od reguł trybu Random :
Klauzula
RecordLengthFileOpenw funkcji nie ma wpływu.FilePutzapisuje wszystkie zmienne na dysku stale, czyli bez uzupełniania między rekordami.W przypadku dowolnej tablicy innej niż tablica w strukturze
FilePutzapisuje tylko dane. Deskryptor nie jest zapisywany.FilePutzapisuje ciągi o zmiennej długości, które nie są elementami struktur bez deskryptora długości dwu bajtów. Liczba zapisanych bajtów jest równa liczbie znaków w ciągu. Na przykład następujące instrukcje zapisują 11 bajtów do pliku o numerze 1:Dim hellow As String = "Hello World" FilePut(1, hellow)Zapisywanie w pliku przy użyciu
FilePutfunkcji wymagaWritedostępu z wyliczenia FileIOPermissionAccess .
Zobacz też
- FileGet
- FileOpen(Int32, String, OpenMode, OpenAccess, OpenShare, Int32)
- Seek
- FileGetObject(Int32, Object, Int64)
- VBFixedStringAttribute
- Len(UInt16)
- ArgumentException
- IOException
- Writing to Files in Visual Basic
Dotyczy
FilePut(Int32, Int32, Int64)
Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność i wydajność operacji we/wy plików niż FilePut. Aby uzyskać więcej informacji, zobacz FileSystem.
public static void FilePut(int FileNumber, int Value, long RecordNumber = -1);
static member FilePut : int * int * int64 -> unit
Public Sub FilePut (FileNumber As Integer, Value As Integer, Optional RecordNumber As Long = -1)
Parametry
- FileNumber
- Int32
To jest wymagane. Dowolny prawidłowy numer pliku.
- Value
- Int32
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.
Wyjątki
RecordNumber
< 1 i nie równe -1.
Tryb pliku jest nieprawidłowy.
Przykłady
W tym przykładzie użyto funkcji do zapisywania FilePut danych w pliku. Pięć rekordów struktury Person jest zapisywanych w pliku.
Structure Person
Public ID As Integer
Public Name As String
End Structure
Sub WriteData()
Dim PatientRecord As Person
Dim recordNumber As Integer
' Open file for random access.
FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary)
' Loop 5 times.
For recordNumber = 1 To 5
' Define ID.
PatientRecord.ID = recordNumber
' Create a string.
PatientRecord.Name = "Name " & recordNumber
' Write record to file.
FilePut(1, PatientRecord)
Next recordNumber
FileClose(1)
End Sub
Uwagi
FilePutjest prawidłowy tylko w Random trybie i .Binary
Dane zapisywane FilePut za pomocą polecenia są zwykle odczytywane z pliku przy użyciu polecenia FileGet.
Pierwszy rekord lub bajt w pliku znajduje się na pozycji 1, drugi rekord lub bajt znajduje się na pozycji 2 itd. Jeśli pominięto RecordNumber, zostanie zapisany następny rekord lub bajt po ostatniej FileGet funkcji lub FilePut wskazywany przez ostatnią Seek funkcję.
StringIsFixedLength Argument określa, czy funkcja interpretuje ciągi jako zmienne, czy stałą długość.
FilePut nie zapisuje deskryptora długości, gdy argument ma wartość True. Jeśli używasz polecenia StringIsFixedLength = True z elementem FilePut, musisz wykonać to samo z elementem FileGeti musisz 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
RecordLengthklauzuliFileOpenfunkcji,FilePutzapisuje 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 określić ilości danych uzupełniania z pewnością, 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 wRecordLengthklauzuliFileOpenfunkcji, zostanie zgłoszony wyjątek.Jeśli zapisywana zmienna jest ciągiem,
FilePutzapisuje deskryptor dwu bajtowy zawierający długość ciągu, a następnie zapisuje dane, które przechodzą do zmiennej. W związku z tym długość rekordu określona przez klauzulęRecordLengthwFileOpenfunkcji musi wynosić co najmniej dwa bajty większe niż rzeczywista długość ciągu.Jeśli zapisywana zmienna jest obiektem zawierającym typ liczbowy,
FilePutzapisuje dwa bajty identyfikująceVarTypeobiekt, a następnie zapisuje zmienną. Na przykład podczas pisania obiektu zawierającego liczbę całkowitąFilePutzapisuje sześć bajtów: dwa bajty identyfikujące obiekt jakoVarType(3)(Integer) i cztery bajty zawierające dane. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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,
FilePutzapisuje deskryptor dwu bajtowy identyfikującyVarType(8)obiekt, deskryptor dwu bajtowy wskazujący długość ciągu, a następnie zapisuje dane ciągu. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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ćTruego do parametruStringIsFixedLength, a odczytany ciąg powinien być prawidłową długością.Jeśli zapisywana zmienna jest tablicą, możesz wybrać, czy napisać deskryptor dla rozmiaru i wymiarów tablicy. Visual Basic 6.0 i starszych wersjach zapisują deskryptor plików dla tablicy dynamicznej, ale nie dla tablicy o stałym rozmiarze. Visual Basic 2005 domyślnie nie zapisuje deskryptora. Aby napisać deskryptor, ustaw
ArrayIsDynamicparametr naTruewartość . Podczas zapisywania tablicy należy dopasować sposób odczytywania tablicy; jeśli zostanie odczytany za pomocą deskryptora, musisz napisać deskryptor. 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). Długość rekorduRecordLengthokreślona przez klauzulę wFileOpenfunkcji musi być większa lub równa sumie wszystkich bajtów wymaganych do zapisania danych tablicy i deskryptora tablicy. Na przykład następująca deklaracja tablicy wymaga 218 bajtów, gdy tablica jest zapisywana na dysku.Dim MyArray(4, 9) As IntegerJeśli zapisywana zmienna jest dowolnym innym typem zmiennej (a nie ciągiem o zmiennej długości lub obiektem),
FilePutzapisuje tylko dane zmiennych. Długość rekordu określona przez klauzulęRecordLengthFileOpenw funkcji musi być większa lub równa długości zapisywanych danych.FilePutzapisuje elementy struktur tak, jakby zostały napisane indywidualnie, z wyjątkiem braku wypełnienia między elementami. AtrybutVBFixedStringmożna zastosować do pól ciągów w strukturach, aby wskazać rozmiar ciągu podczas zapisywania na dysku.Note
Pola ciągów, które mają więcej bajtów niż określony przez
VBFixedStringatrybut, są obcinane podczas zapisywania na dysku,
Tryb binarny
W przypadku plików otwartych w Binary trybie większość Random reguł trybu ma zastosowanie z pewnymi wyjątkami. Następujące reguły dotyczące plików otwartych w Binary trybie różnią się od reguł trybu Random :
Klauzula
RecordLengthFileOpenw funkcji nie ma wpływu.FilePutzapisuje wszystkie zmienne na dysku stale, czyli bez uzupełniania między rekordami.W przypadku dowolnej tablicy innej niż tablica w strukturze
FilePutzapisuje tylko dane. Deskryptor nie jest zapisywany.FilePutzapisuje ciągi o zmiennej długości, które nie są elementami struktur bez deskryptora długości dwu bajtów. Liczba zapisanych bajtów jest równa liczbie znaków w ciągu. Na przykład następujące instrukcje zapisują 11 bajtów do pliku o numerze 1:Dim hellow As String = "Hello World" FilePut(1, hellow)Zapisywanie w pliku przy użyciu
FilePutfunkcji wymagaWritedostępu z wyliczenia FileIOPermissionAccess .
Zobacz też
- FileGet
- FileOpen(Int32, String, OpenMode, OpenAccess, OpenShare, Int32)
- Seek
- FileGetObject(Int32, Object, Int64)
- VBFixedStringAttribute
- Len(UInt16)
- ArgumentException
- IOException
- Writing to Files in Visual Basic
Dotyczy
FilePut(Int32, Array, Int64, Boolean, Boolean)
Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność i wydajność operacji we/wy plików niż FilePut. Aby uzyskać więcej informacji, zobacz FileSystem.
public static void FilePut(int FileNumber, Array Value, long RecordNumber = -1, bool ArrayIsDynamic = false, bool StringIsFixedLength = false);
static member FilePut : int * Array * int64 * bool * bool -> unit
Public Sub FilePut (FileNumber As Integer, Value As Array, Optional RecordNumber As Long = -1, Optional ArrayIsDynamic As Boolean = false, Optional StringIsFixedLength As Boolean = false)
Parametry
- FileNumber
- Int32
To jest wymagane. Dowolny prawidłowy numer pliku.
- Value
- Array
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.
- ArrayIsDynamic
- Boolean
Optional. Dotyczy tylko podczas pisania tablicy. Określa, czy tablica ma być traktowana jako dynamiczna, oraz czy należy napisać deskryptor tablicy dla ciągu, który opisuje długość.
- StringIsFixedLength
- Boolean
Optional. Dotyczy tylko podczas pisania ciągu. Określa, czy do pliku ma być zapisywany deskryptor długości ciągu dwu bajtowego. Wartość domyślna to False.
Wyjątki
RecordNumber
< 1 i nie równe -1.
Tryb pliku jest nieprawidłowy.
Przykłady
W tym przykładzie użyto funkcji do zapisywania FilePut danych w pliku. Pięć rekordów struktury Person jest zapisywanych w pliku.
Structure Person
Public ID As Integer
Public Name As String
End Structure
Sub WriteData()
Dim PatientRecord As Person
Dim recordNumber As Integer
' Open file for random access.
FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary)
' Loop 5 times.
For recordNumber = 1 To 5
' Define ID.
PatientRecord.ID = recordNumber
' Create a string.
PatientRecord.Name = "Name " & recordNumber
' Write record to file.
FilePut(1, PatientRecord)
Next recordNumber
FileClose(1)
End Sub
Uwagi
FilePutjest prawidłowy tylko w Random trybie i .Binary
Dane zapisywane FilePut za pomocą polecenia są zwykle odczytywane z pliku przy użyciu polecenia FileGet.
Pierwszy rekord lub bajt w pliku znajduje się na pozycji 1, drugi rekord lub bajt znajduje się na pozycji 2 itd. Jeśli pominięto RecordNumber, zostanie zapisany następny rekord lub bajt po ostatniej FileGet funkcji lub FilePut wskazywany przez ostatnią Seek funkcję.
StringIsFixedLength Argument określa, czy funkcja interpretuje ciągi jako zmienne, czy stałą długość.
FilePut nie zapisuje deskryptora długości, gdy argument ma wartość True. Jeśli używasz polecenia StringIsFixedLength = True z elementem FilePut, musisz wykonać to samo z elementem FileGeti musisz 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
RecordLengthklauzuliFileOpenfunkcji,FilePutzapisuje 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 określić ilości danych uzupełniania z pewnością, 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 wRecordLengthklauzuliFileOpenfunkcji, zostanie zgłoszony wyjątek.Jeśli zapisywana zmienna jest ciągiem,
FilePutzapisuje deskryptor dwu bajtowy zawierający długość ciągu, a następnie zapisuje dane, które przechodzą do zmiennej. W związku z tym długość rekordu określona przez klauzulęRecordLengthwFileOpenfunkcji musi wynosić co najmniej dwa bajty większe niż rzeczywista długość ciągu.Jeśli zapisywana zmienna jest obiektem zawierającym typ liczbowy,
FilePutzapisuje dwa bajty identyfikująceVarTypeobiekt, a następnie zapisuje zmienną. Na przykład podczas pisania obiektu zawierającego liczbę całkowitąFilePutzapisuje sześć bajtów: dwa bajty identyfikujące obiekt jakoVarType(3)(Integer) i cztery bajty zawierające dane. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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,
FilePutzapisuje deskryptor dwu bajtowy identyfikującyVarType(8)obiekt, deskryptor dwu bajtowy wskazujący długość ciągu, a następnie zapisuje dane ciągu. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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ćTruego do parametruStringIsFixedLength, a odczytany ciąg powinien być prawidłową długością.Jeśli zapisywana zmienna jest tablicą, możesz wybrać, czy napisać deskryptor dla rozmiaru i wymiarów tablicy. Visual Basic 6.0 i starszych wersjach zapisują deskryptor plików dla tablicy dynamicznej, ale nie dla tablicy o stałym rozmiarze. Visual Basic 2005 domyślnie nie zapisuje deskryptora. Aby napisać deskryptor, ustaw
ArrayIsDynamicparametr naTruewartość . Podczas zapisywania tablicy należy dopasować sposób odczytywania tablicy; jeśli zostanie odczytany za pomocą deskryptora, musisz napisać deskryptor. 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). Długość rekorduRecordLengthokreślona przez klauzulę wFileOpenfunkcji musi być większa lub równa sumie wszystkich bajtów wymaganych do zapisania danych tablicy i deskryptora tablicy. Na przykład następująca deklaracja tablicy wymaga 218 bajtów, gdy tablica jest zapisywana na dysku.Dim MyArray(4, 9) As IntegerJeśli zapisywana zmienna jest dowolnym innym typem zmiennej (a nie ciągiem o zmiennej długości lub obiektem),
FilePutzapisuje tylko dane zmiennych. Długość rekordu określona przez klauzulęRecordLengthFileOpenw funkcji musi być większa lub równa długości zapisywanych danych.FilePutzapisuje elementy struktur tak, jakby zostały napisane indywidualnie, z wyjątkiem braku wypełnienia między elementami. AtrybutVBFixedStringmożna zastosować do pól ciągów w strukturach, aby wskazać rozmiar ciągu podczas zapisywania na dysku.Note
Pola ciągów, które mają więcej bajtów niż określony przez
VBFixedStringatrybut, są obcinane podczas zapisywania na dysku,
Tryb binarny
W przypadku plików otwartych w Binary trybie większość Random reguł trybu ma zastosowanie z pewnymi wyjątkami. Następujące reguły dotyczące plików otwartych w Binary trybie różnią się od reguł trybu Random :
Klauzula
RecordLengthFileOpenw funkcji nie ma wpływu.FilePutzapisuje wszystkie zmienne na dysku stale, czyli bez uzupełniania między rekordami.W przypadku dowolnej tablicy innej niż tablica w strukturze
FilePutzapisuje tylko dane. Deskryptor nie jest zapisywany.FilePutzapisuje ciągi o zmiennej długości, które nie są elementami struktur bez deskryptora długości dwu bajtów. Liczba zapisanych bajtów jest równa liczbie znaków w ciągu. Na przykład następujące instrukcje zapisują 11 bajtów do pliku o numerze 1:Dim hellow As String = "Hello World" FilePut(1, hellow)Zapisywanie w pliku przy użyciu
FilePutfunkcji wymagaWritedostępu z wyliczenia FileIOPermissionAccess .
Zobacz też
- FileGet
- FileOpen(Int32, String, OpenMode, OpenAccess, OpenShare, Int32)
- Seek
- FileGetObject(Int32, Object, Int64)
- VBFixedStringAttribute
- Len(UInt16)
- ArgumentException
- IOException
- Writing to Files in Visual Basic
Dotyczy
FilePut(Int32, Double, Int64)
Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność i wydajność operacji we/wy plików niż FilePut. Aby uzyskać więcej informacji, zobacz FileSystem.
public static void FilePut(int FileNumber, double Value, long RecordNumber = -1);
static member FilePut : int * double * int64 -> unit
Public Sub FilePut (FileNumber As Integer, Value As Double, Optional RecordNumber As Long = -1)
Parametry
- FileNumber
- Int32
To jest wymagane. Dowolny prawidłowy numer pliku.
- Value
- Double
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.
Wyjątki
RecordNumber
< 1 i nie równe -1.
Tryb pliku jest nieprawidłowy.
Przykłady
W tym przykładzie użyto funkcji do zapisywania FilePut danych w pliku. Pięć rekordów struktury Person jest zapisywanych w pliku.
Structure Person
Public ID As Integer
Public Name As String
End Structure
Sub WriteData()
Dim PatientRecord As Person
Dim recordNumber As Integer
' Open file for random access.
FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary)
' Loop 5 times.
For recordNumber = 1 To 5
' Define ID.
PatientRecord.ID = recordNumber
' Create a string.
PatientRecord.Name = "Name " & recordNumber
' Write record to file.
FilePut(1, PatientRecord)
Next recordNumber
FileClose(1)
End Sub
Uwagi
FilePutjest prawidłowy tylko w Random trybie i .Binary
Dane zapisywane FilePut za pomocą polecenia są zwykle odczytywane z pliku przy użyciu polecenia FileGet.
Pierwszy rekord lub bajt w pliku znajduje się na pozycji 1, drugi rekord lub bajt znajduje się na pozycji 2 itd. Jeśli pominięto RecordNumber, zostanie zapisany następny rekord lub bajt po ostatniej FileGet funkcji lub FilePut wskazywany przez ostatnią Seek funkcję.
StringIsFixedLength Argument określa, czy funkcja interpretuje ciągi jako zmienne, czy stałą długość.
FilePut nie zapisuje deskryptora długości, gdy argument ma wartość True. Jeśli używasz polecenia StringIsFixedLength = True z elementem FilePut, musisz wykonać to samo z elementem FileGeti musisz 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
RecordLengthklauzuliFileOpenfunkcji,FilePutzapisuje 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 określić ilości danych uzupełniania z pewnością, 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 wRecordLengthklauzuliFileOpenfunkcji, zostanie zgłoszony wyjątek.Jeśli zapisywana zmienna jest ciągiem,
FilePutzapisuje deskryptor dwu bajtowy zawierający długość ciągu, a następnie zapisuje dane, które przechodzą do zmiennej. W związku z tym długość rekordu określona przez klauzulęRecordLengthwFileOpenfunkcji musi wynosić co najmniej dwa bajty większe niż rzeczywista długość ciągu.Jeśli zapisywana zmienna jest obiektem zawierającym typ liczbowy,
FilePutzapisuje dwa bajty identyfikująceVarTypeobiekt, a następnie zapisuje zmienną. Na przykład podczas pisania obiektu zawierającego liczbę całkowitąFilePutzapisuje sześć bajtów: dwa bajty identyfikujące obiekt jakoVarType(3)(Integer) i cztery bajty zawierające dane. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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,
FilePutzapisuje deskryptor dwu bajtowy identyfikującyVarType(8)obiekt, deskryptor dwu bajtowy wskazujący długość ciągu, a następnie zapisuje dane ciągu. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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ćTruego do parametruStringIsFixedLength, a odczytany ciąg powinien być prawidłową długością.Jeśli zapisywana zmienna jest tablicą, możesz wybrać, czy napisać deskryptor dla rozmiaru i wymiarów tablicy. Visual Basic 6.0 i starszych wersjach zapisują deskryptor plików dla tablicy dynamicznej, ale nie dla tablicy o stałym rozmiarze. Visual Basic 2005 domyślnie nie zapisuje deskryptora. Aby napisać deskryptor, ustaw
ArrayIsDynamicparametr naTruewartość . Podczas zapisywania tablicy należy dopasować sposób odczytywania tablicy; jeśli zostanie odczytany za pomocą deskryptora, musisz napisać deskryptor. 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). Długość rekorduRecordLengthokreślona przez klauzulę wFileOpenfunkcji musi być większa lub równa sumie wszystkich bajtów wymaganych do zapisania danych tablicy i deskryptora tablicy. Na przykład następująca deklaracja tablicy wymaga 218 bajtów, gdy tablica jest zapisywana na dysku.Dim MyArray(4, 9) As IntegerJeśli zapisywana zmienna jest dowolnym innym typem zmiennej (a nie ciągiem o zmiennej długości lub obiektem),
FilePutzapisuje tylko dane zmiennych. Długość rekordu określona przez klauzulęRecordLengthFileOpenw funkcji musi być większa lub równa długości zapisywanych danych.FilePutzapisuje elementy struktur tak, jakby zostały napisane indywidualnie, z wyjątkiem braku wypełnienia między elementami. AtrybutVBFixedStringmożna zastosować do pól ciągów w strukturach, aby wskazać rozmiar ciągu podczas zapisywania na dysku.Note
Pola ciągów, które mają więcej bajtów niż określony przez
VBFixedStringatrybut, są obcinane podczas zapisywania na dysku,
Tryb binarny
W przypadku plików otwartych w Binary trybie większość Random reguł trybu ma zastosowanie z pewnymi wyjątkami. Następujące reguły dotyczące plików otwartych w Binary trybie różnią się od reguł trybu Random :
Klauzula
RecordLengthFileOpenw funkcji nie ma wpływu.FilePutzapisuje wszystkie zmienne na dysku stale, czyli bez uzupełniania między rekordami.W przypadku dowolnej tablicy innej niż tablica w strukturze
FilePutzapisuje tylko dane. Deskryptor nie jest zapisywany.FilePutzapisuje ciągi o zmiennej długości, które nie są elementami struktur bez deskryptora długości dwu bajtów. Liczba zapisanych bajtów jest równa liczbie znaków w ciągu. Na przykład następujące instrukcje zapisują 11 bajtów do pliku o numerze 1:Dim hellow As String = "Hello World" FilePut(1, hellow)Zapisywanie w pliku przy użyciu
FilePutfunkcji wymagaWritedostępu z wyliczenia FileIOPermissionAccess .
Zobacz też
- FileGet
- FileOpen(Int32, String, OpenMode, OpenAccess, OpenShare, Int32)
- Seek
- FileGetObject(Int32, Object, Int64)
- VBFixedStringAttribute
- Len(UInt16)
- ArgumentException
- IOException
- Writing to Files in Visual Basic
Dotyczy
FilePut(Int32, Decimal, Int64)
Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność i wydajność operacji we/wy plików niż FilePut. Aby uzyskać więcej informacji, zobacz FileSystem.
public static void FilePut(int FileNumber, decimal Value, long RecordNumber = -1);
static member FilePut : int * decimal * int64 -> unit
Public Sub FilePut (FileNumber As Integer, Value As Decimal, Optional RecordNumber As Long = -1)
Parametry
- FileNumber
- Int32
To jest wymagane. Dowolny prawidłowy numer pliku.
- Value
- Decimal
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.
Wyjątki
RecordNumber
< 1 i nie równe -1.
Tryb pliku jest nieprawidłowy.
Przykłady
W tym przykładzie użyto funkcji do zapisywania FilePut danych w pliku. Pięć rekordów struktury Person jest zapisywanych w pliku.
Structure Person
Public ID As Integer
Public Name As String
End Structure
Sub WriteData()
Dim PatientRecord As Person
Dim recordNumber As Integer
' Open file for random access.
FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary)
' Loop 5 times.
For recordNumber = 1 To 5
' Define ID.
PatientRecord.ID = recordNumber
' Create a string.
PatientRecord.Name = "Name " & recordNumber
' Write record to file.
FilePut(1, PatientRecord)
Next recordNumber
FileClose(1)
End Sub
Uwagi
FilePutjest prawidłowy tylko w Random trybie i .Binary
Dane zapisywane FilePut za pomocą polecenia są zwykle odczytywane z pliku przy użyciu polecenia FileGet.
Pierwszy rekord lub bajt w pliku znajduje się na pozycji 1, drugi rekord lub bajt znajduje się na pozycji 2 itd. Jeśli pominięto RecordNumber, zostanie zapisany następny rekord lub bajt po ostatniej FileGet funkcji lub FilePut wskazywany przez ostatnią Seek funkcję.
StringIsFixedLength Argument określa, czy funkcja interpretuje ciągi jako zmienne, czy stałą długość.
FilePut nie zapisuje deskryptora długości, gdy argument ma wartość True. Jeśli używasz polecenia StringIsFixedLength = True z elementem FilePut, musisz wykonać to samo z elementem FileGeti musisz 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
RecordLengthklauzuliFileOpenfunkcji,FilePutzapisuje 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 określić ilości danych uzupełniania z pewnością, 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 wRecordLengthklauzuliFileOpenfunkcji, zostanie zgłoszony wyjątek.Jeśli zapisywana zmienna jest ciągiem,
FilePutzapisuje deskryptor dwu bajtowy zawierający długość ciągu, a następnie zapisuje dane, które przechodzą do zmiennej. W związku z tym długość rekordu określona przez klauzulęRecordLengthwFileOpenfunkcji musi wynosić co najmniej dwa bajty większe niż rzeczywista długość ciągu.Jeśli zapisywana zmienna jest obiektem zawierającym typ liczbowy,
FilePutzapisuje dwa bajty identyfikująceVarTypeobiekt, a następnie zapisuje zmienną. Na przykład podczas pisania obiektu zawierającego liczbę całkowitąFilePutzapisuje sześć bajtów: dwa bajty identyfikujące obiekt jakoVarType(3)(Integer) i cztery bajty zawierające dane. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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,
FilePutzapisuje deskryptor dwu bajtowy identyfikującyVarType(8)obiekt, deskryptor dwu bajtowy wskazujący długość ciągu, a następnie zapisuje dane ciągu. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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ćTruego do parametruStringIsFixedLength, a odczytany ciąg powinien być prawidłową długością.Jeśli zapisywana zmienna jest tablicą, możesz wybrać, czy napisać deskryptor dla rozmiaru i wymiarów tablicy. Visual Basic 6.0 i starszych wersjach zapisują deskryptor plików dla tablicy dynamicznej, ale nie dla tablicy o stałym rozmiarze. Visual Basic 2005 domyślnie nie zapisuje deskryptora. Aby napisać deskryptor, ustaw
ArrayIsDynamicparametr naTruewartość . Podczas zapisywania tablicy należy dopasować sposób odczytywania tablicy; jeśli zostanie odczytany za pomocą deskryptora, musisz napisać deskryptor. 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). Długość rekorduRecordLengthokreślona przez klauzulę wFileOpenfunkcji musi być większa lub równa sumie wszystkich bajtów wymaganych do zapisania danych tablicy i deskryptora tablicy. Na przykład następująca deklaracja tablicy wymaga 218 bajtów, gdy tablica jest zapisywana na dysku.Dim MyArray(4, 9) As IntegerJeśli zapisywana zmienna jest dowolnym innym typem zmiennej (a nie ciągiem o zmiennej długości lub obiektem),
FilePutzapisuje tylko dane zmiennych. Długość rekordu określona przez klauzulęRecordLengthFileOpenw funkcji musi być większa lub równa długości zapisywanych danych.FilePutzapisuje elementy struktur tak, jakby zostały napisane indywidualnie, z wyjątkiem braku wypełnienia między elementami. AtrybutVBFixedStringmożna zastosować do pól ciągów w strukturach, aby wskazać rozmiar ciągu podczas zapisywania na dysku.Note
Pola ciągów, które mają więcej bajtów niż określony przez
VBFixedStringatrybut, są obcinane podczas zapisywania na dysku,
Tryb binarny
W przypadku plików otwartych w Binary trybie większość Random reguł trybu ma zastosowanie z pewnymi wyjątkami. Następujące reguły dotyczące plików otwartych w Binary trybie różnią się od reguł trybu Random :
Klauzula
RecordLengthFileOpenw funkcji nie ma wpływu.FilePutzapisuje wszystkie zmienne na dysku stale, czyli bez uzupełniania między rekordami.W przypadku dowolnej tablicy innej niż tablica w strukturze
FilePutzapisuje tylko dane. Deskryptor nie jest zapisywany.FilePutzapisuje ciągi o zmiennej długości, które nie są elementami struktur bez deskryptora długości dwu bajtów. Liczba zapisanych bajtów jest równa liczbie znaków w ciągu. Na przykład następujące instrukcje zapisują 11 bajtów do pliku o numerze 1:Dim hellow As String = "Hello World" FilePut(1, hellow)Zapisywanie w pliku przy użyciu
FilePutfunkcji wymagaWritedostępu z wyliczenia FileIOPermissionAccess .
Zobacz też
- FileGet
- FileOpen(Int32, String, OpenMode, OpenAccess, OpenShare, Int32)
- Seek
- FileGetObject(Int32, Object, Int64)
- VBFixedStringAttribute
- Len(UInt16)
- ArgumentException
- IOException
- Writing to Files in Visual Basic
Dotyczy
FilePut(Int32, DateTime, Int64)
Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność i wydajność operacji we/wy plików niż FilePut. Aby uzyskać więcej informacji, zobacz FileSystem.
public static void FilePut(int FileNumber, DateTime Value, long RecordNumber = -1);
static member FilePut : int * DateTime * int64 -> unit
Public Sub FilePut (FileNumber As Integer, Value As DateTime, Optional RecordNumber As Long = -1)
Parametry
- FileNumber
- Int32
To jest wymagane. Dowolny prawidłowy numer pliku.
- Value
- DateTime
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.
Wyjątki
RecordNumber
< 1 i nie równe -1.
Tryb pliku jest nieprawidłowy.
Przykłady
W tym przykładzie użyto funkcji do zapisywania FilePut danych w pliku. Pięć rekordów struktury Person jest zapisywanych w pliku.
Structure Person
Public ID As Integer
Public Name As String
End Structure
Sub WriteData()
Dim PatientRecord As Person
Dim recordNumber As Integer
' Open file for random access.
FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary)
' Loop 5 times.
For recordNumber = 1 To 5
' Define ID.
PatientRecord.ID = recordNumber
' Create a string.
PatientRecord.Name = "Name " & recordNumber
' Write record to file.
FilePut(1, PatientRecord)
Next recordNumber
FileClose(1)
End Sub
Uwagi
FilePutjest prawidłowy tylko w Random trybie i .Binary
Dane zapisywane FilePut za pomocą polecenia są zwykle odczytywane z pliku przy użyciu polecenia FileGet.
Pierwszy rekord lub bajt w pliku znajduje się na pozycji 1, drugi rekord lub bajt znajduje się na pozycji 2 itd. Jeśli pominięto RecordNumber, zostanie zapisany następny rekord lub bajt po ostatniej FileGet funkcji lub FilePut wskazywany przez ostatnią Seek funkcję.
StringIsFixedLength Argument określa, czy funkcja interpretuje ciągi jako zmienne, czy stałą długość.
FilePut nie zapisuje deskryptora długości, gdy argument ma wartość True. Jeśli używasz polecenia StringIsFixedLength = True z elementem FilePut, musisz wykonać to samo z elementem FileGeti musisz 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
RecordLengthklauzuliFileOpenfunkcji,FilePutzapisuje 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 określić ilości danych uzupełniania z pewnością, 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 wRecordLengthklauzuliFileOpenfunkcji, zostanie zgłoszony wyjątek.Jeśli zapisywana zmienna jest ciągiem,
FilePutzapisuje deskryptor dwu bajtowy zawierający długość ciągu, a następnie zapisuje dane, które przechodzą do zmiennej. W związku z tym długość rekordu określona przez klauzulęRecordLengthwFileOpenfunkcji musi wynosić co najmniej dwa bajty większe niż rzeczywista długość ciągu.Jeśli zapisywana zmienna jest obiektem zawierającym typ liczbowy,
FilePutzapisuje dwa bajty identyfikująceVarTypeobiekt, a następnie zapisuje zmienną. Na przykład podczas pisania obiektu zawierającego liczbę całkowitąFilePutzapisuje sześć bajtów: dwa bajty identyfikujące obiekt jakoVarType(3)(Integer) i cztery bajty zawierające dane. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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,
FilePutzapisuje deskryptor dwu bajtowy identyfikującyVarType(8)obiekt, deskryptor dwu bajtowy wskazujący długość ciągu, a następnie zapisuje dane ciągu. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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ćTruego do parametruStringIsFixedLength, a odczytany ciąg powinien być prawidłową długością.Jeśli zapisywana zmienna jest tablicą, możesz wybrać, czy napisać deskryptor dla rozmiaru i wymiarów tablicy. Visual Basic 6.0 i starszych wersjach zapisują deskryptor plików dla tablicy dynamicznej, ale nie dla tablicy o stałym rozmiarze. Visual Basic 2005 domyślnie nie zapisuje deskryptora. Aby napisać deskryptor, ustaw
ArrayIsDynamicparametr naTruewartość . Podczas zapisywania tablicy należy dopasować sposób odczytywania tablicy; jeśli zostanie odczytany za pomocą deskryptora, musisz napisać deskryptor. 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). Długość rekorduRecordLengthokreślona przez klauzulę wFileOpenfunkcji musi być większa lub równa sumie wszystkich bajtów wymaganych do zapisania danych tablicy i deskryptora tablicy. Na przykład następująca deklaracja tablicy wymaga 218 bajtów, gdy tablica jest zapisywana na dysku.Dim MyArray(4, 9) As IntegerJeśli zapisywana zmienna jest dowolnym innym typem zmiennej (a nie ciągiem o zmiennej długości lub obiektem),
FilePutzapisuje tylko dane zmiennych. Długość rekordu określona przez klauzulęRecordLengthFileOpenw funkcji musi być większa lub równa długości zapisywanych danych.FilePutzapisuje elementy struktur tak, jakby zostały napisane indywidualnie, z wyjątkiem braku wypełnienia między elementami. AtrybutVBFixedStringmożna zastosować do pól ciągów w strukturach, aby wskazać rozmiar ciągu podczas zapisywania na dysku.Note
Pola ciągów, które mają więcej bajtów niż określony przez
VBFixedStringatrybut, są obcinane podczas zapisywania na dysku,
Tryb binarny
W przypadku plików otwartych w Binary trybie większość Random reguł trybu ma zastosowanie z pewnymi wyjątkami. Następujące reguły dotyczące plików otwartych w Binary trybie różnią się od reguł trybu Random :
Klauzula
RecordLengthFileOpenw funkcji nie ma wpływu.FilePutzapisuje wszystkie zmienne na dysku stale, czyli bez uzupełniania między rekordami.W przypadku dowolnej tablicy innej niż tablica w strukturze
FilePutzapisuje tylko dane. Deskryptor nie jest zapisywany.FilePutzapisuje ciągi o zmiennej długości, które nie są elementami struktur bez deskryptora długości dwu bajtów. Liczba zapisanych bajtów jest równa liczbie znaków w ciągu. Na przykład następujące instrukcje zapisują 11 bajtów do pliku o numerze 1:Dim hellow As String = "Hello World" FilePut(1, hellow)Zapisywanie w pliku przy użyciu
FilePutfunkcji wymagaWritedostępu z wyliczenia FileIOPermissionAccess .
Zobacz też
- FileGet
- FileOpen(Int32, String, OpenMode, OpenAccess, OpenShare, Int32)
- Seek
- FileGetObject(Int32, Object, Int64)
- VBFixedStringAttribute
- Len(UInt16)
- ArgumentException
- IOException
- Writing to Files in Visual Basic
Dotyczy
FilePut(Int32, Char, Int64)
Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność i wydajność operacji we/wy plików niż FilePut. Aby uzyskać więcej informacji, zobacz FileSystem.
public static void FilePut(int FileNumber, char Value, long RecordNumber = -1);
static member FilePut : int * char * int64 -> unit
Public Sub FilePut (FileNumber As Integer, Value As Char, Optional RecordNumber As Long = -1)
Parametry
- FileNumber
- Int32
To jest wymagane. Dowolny prawidłowy numer pliku.
- Value
- Char
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.
Wyjątki
RecordNumber
< 1 i nie równe -1.
Tryb pliku jest nieprawidłowy.
Przykłady
W tym przykładzie użyto funkcji do zapisywania FilePut danych w pliku. Pięć rekordów struktury Person jest zapisywanych w pliku.
Structure Person
Public ID As Integer
Public Name As String
End Structure
Sub WriteData()
Dim PatientRecord As Person
Dim recordNumber As Integer
' Open file for random access.
FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary)
' Loop 5 times.
For recordNumber = 1 To 5
' Define ID.
PatientRecord.ID = recordNumber
' Create a string.
PatientRecord.Name = "Name " & recordNumber
' Write record to file.
FilePut(1, PatientRecord)
Next recordNumber
FileClose(1)
End Sub
Uwagi
FilePutjest prawidłowy tylko w Random trybie i .Binary
Dane zapisywane FilePut za pomocą polecenia są zwykle odczytywane z pliku przy użyciu polecenia FileGet.
Pierwszy rekord lub bajt w pliku znajduje się na pozycji 1, drugi rekord lub bajt znajduje się na pozycji 2 itd. Jeśli pominięto RecordNumber, zostanie zapisany następny rekord lub bajt po ostatniej FileGet funkcji lub FilePut wskazywany przez ostatnią Seek funkcję.
StringIsFixedLength Argument określa, czy funkcja interpretuje ciągi jako zmienne, czy stałą długość.
FilePut nie zapisuje deskryptora długości, gdy argument ma wartość True. Jeśli używasz polecenia StringIsFixedLength = True z elementem FilePut, musisz wykonać to samo z elementem FileGeti musisz 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
RecordLengthklauzuliFileOpenfunkcji,FilePutzapisuje 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 określić ilości danych uzupełniania z pewnością, 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 wRecordLengthklauzuliFileOpenfunkcji, zostanie zgłoszony wyjątek.Jeśli zapisywana zmienna jest ciągiem,
FilePutzapisuje deskryptor dwu bajtowy zawierający długość ciągu, a następnie zapisuje dane, które przechodzą do zmiennej. W związku z tym długość rekordu określona przez klauzulęRecordLengthwFileOpenfunkcji musi wynosić co najmniej dwa bajty większe niż rzeczywista długość ciągu.Jeśli zapisywana zmienna jest obiektem zawierającym typ liczbowy,
FilePutzapisuje dwa bajty identyfikująceVarTypeobiekt, a następnie zapisuje zmienną. Na przykład podczas pisania obiektu zawierającego liczbę całkowitąFilePutzapisuje sześć bajtów: dwa bajty identyfikujące obiekt jakoVarType(3)(Integer) i cztery bajty zawierające dane. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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,
FilePutzapisuje deskryptor dwu bajtowy identyfikującyVarType(8)obiekt, deskryptor dwu bajtowy wskazujący długość ciągu, a następnie zapisuje dane ciągu. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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ćTruego do parametruStringIsFixedLength, a odczytany ciąg powinien być prawidłową długością.Jeśli zapisywana zmienna jest tablicą, możesz wybrać, czy napisać deskryptor dla rozmiaru i wymiarów tablicy. Visual Basic 6.0 i starszych wersjach zapisują deskryptor plików dla tablicy dynamicznej, ale nie dla tablicy o stałym rozmiarze. Visual Basic 2005 domyślnie nie zapisuje deskryptora. Aby napisać deskryptor, ustaw
ArrayIsDynamicparametr naTruewartość . Podczas zapisywania tablicy należy dopasować sposób odczytywania tablicy; jeśli zostanie odczytany za pomocą deskryptora, musisz napisać deskryptor. 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). Długość rekorduRecordLengthokreślona przez klauzulę wFileOpenfunkcji musi być większa lub równa sumie wszystkich bajtów wymaganych do zapisania danych tablicy i deskryptora tablicy. Na przykład następująca deklaracja tablicy wymaga 218 bajtów, gdy tablica jest zapisywana na dysku.Dim MyArray(4, 9) As IntegerJeśli zapisywana zmienna jest dowolnym innym typem zmiennej (a nie ciągiem o zmiennej długości lub obiektem),
FilePutzapisuje tylko dane zmiennych. Długość rekordu określona przez klauzulęRecordLengthFileOpenw funkcji musi być większa lub równa długości zapisywanych danych.FilePutzapisuje elementy struktur tak, jakby zostały napisane indywidualnie, z wyjątkiem braku wypełnienia między elementami. AtrybutVBFixedStringmożna zastosować do pól ciągów w strukturach, aby wskazać rozmiar ciągu podczas zapisywania na dysku.Note
Pola ciągów, które mają więcej bajtów niż określony przez
VBFixedStringatrybut, są obcinane podczas zapisywania na dysku,
Tryb binarny
W przypadku plików otwartych w Binary trybie większość Random reguł trybu ma zastosowanie z pewnymi wyjątkami. Następujące reguły dotyczące plików otwartych w Binary trybie różnią się od reguł trybu Random :
Klauzula
RecordLengthFileOpenw funkcji nie ma wpływu.FilePutzapisuje wszystkie zmienne na dysku stale, czyli bez uzupełniania między rekordami.W przypadku dowolnej tablicy innej niż tablica w strukturze
FilePutzapisuje tylko dane. Deskryptor nie jest zapisywany.FilePutzapisuje ciągi o zmiennej długości, które nie są elementami struktur bez deskryptora długości dwu bajtów. Liczba zapisanych bajtów jest równa liczbie znaków w ciągu. Na przykład następujące instrukcje zapisują 11 bajtów do pliku o numerze 1:Dim hellow As String = "Hello World" FilePut(1, hellow)Zapisywanie w pliku przy użyciu
FilePutfunkcji wymagaWritedostępu z wyliczenia FileIOPermissionAccess .
Zobacz też
- FileGet
- FileOpen(Int32, String, OpenMode, OpenAccess, OpenShare, Int32)
- Seek
- FileGetObject(Int32, Object, Int64)
- VBFixedStringAttribute
- Len(UInt16)
- ArgumentException
- IOException
- Writing to Files in Visual Basic
Dotyczy
FilePut(Int32, Byte, Int64)
Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność i wydajność operacji we/wy plików niż FilePut. Aby uzyskać więcej informacji, zobacz FileSystem.
public static void FilePut(int FileNumber, byte Value, long RecordNumber = -1);
static member FilePut : int * byte * int64 -> unit
Public Sub FilePut (FileNumber As Integer, Value As Byte, Optional RecordNumber As Long = -1)
Parametry
- FileNumber
- Int32
To jest wymagane. Dowolny prawidłowy numer pliku.
- Value
- Byte
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.
Wyjątki
RecordNumber
< 1 i nie równe -1.
Tryb pliku jest nieprawidłowy.
Przykłady
W tym przykładzie użyto funkcji do zapisywania FilePut danych w pliku. Pięć rekordów struktury Person jest zapisywanych w pliku.
Structure Person
Public ID As Integer
Public Name As String
End Structure
Sub WriteData()
Dim PatientRecord As Person
Dim recordNumber As Integer
' Open file for random access.
FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary)
' Loop 5 times.
For recordNumber = 1 To 5
' Define ID.
PatientRecord.ID = recordNumber
' Create a string.
PatientRecord.Name = "Name " & recordNumber
' Write record to file.
FilePut(1, PatientRecord)
Next recordNumber
FileClose(1)
End Sub
Uwagi
FilePutjest prawidłowy tylko w Random trybie i .Binary
Dane zapisywane FilePut za pomocą polecenia są zwykle odczytywane z pliku przy użyciu polecenia FileGet.
Pierwszy rekord lub bajt w pliku znajduje się na pozycji 1, drugi rekord lub bajt znajduje się na pozycji 2 itd. Jeśli pominięto RecordNumber, zostanie zapisany następny rekord lub bajt po ostatniej FileGet funkcji lub FilePut wskazywany przez ostatnią Seek funkcję.
StringIsFixedLength Argument określa, czy funkcja interpretuje ciągi jako zmienne, czy stałą długość.
FilePut nie zapisuje deskryptora długości, gdy argument ma wartość True. Jeśli używasz polecenia StringIsFixedLength = True z elementem FilePut, musisz wykonać to samo z elementem FileGeti musisz 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
RecordLengthklauzuliFileOpenfunkcji,FilePutzapisuje 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 określić ilości danych uzupełniania z pewnością, 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 wRecordLengthklauzuliFileOpenfunkcji, zostanie zgłoszony wyjątek.Jeśli zapisywana zmienna jest ciągiem,
FilePutzapisuje deskryptor dwu bajtowy zawierający długość ciągu, a następnie zapisuje dane, które przechodzą do zmiennej. W związku z tym długość rekordu określona przez klauzulęRecordLengthwFileOpenfunkcji musi wynosić co najmniej dwa bajty większe niż rzeczywista długość ciągu.Jeśli zapisywana zmienna jest obiektem zawierającym typ liczbowy,
FilePutzapisuje dwa bajty identyfikująceVarTypeobiekt, a następnie zapisuje zmienną. Na przykład podczas pisania obiektu zawierającego liczbę całkowitąFilePutzapisuje sześć bajtów: dwa bajty identyfikujące obiekt jakoVarType(3)(Integer) i cztery bajty zawierające dane. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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,
FilePutzapisuje deskryptor dwu bajtowy identyfikującyVarType(8)obiekt, deskryptor dwu bajtowy wskazujący długość ciągu, a następnie zapisuje dane ciągu. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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ćTruego do parametruStringIsFixedLength, a odczytany ciąg powinien być prawidłową długością.Jeśli zapisywana zmienna jest tablicą, możesz wybrać, czy napisać deskryptor dla rozmiaru i wymiarów tablicy. Visual Basic 6.0 i starszych wersjach zapisują deskryptor plików dla tablicy dynamicznej, ale nie dla tablicy o stałym rozmiarze. Visual Basic 2005 domyślnie nie zapisuje deskryptora. Aby napisać deskryptor, ustaw
ArrayIsDynamicparametr naTruewartość . Podczas zapisywania tablicy należy dopasować sposób odczytywania tablicy; jeśli zostanie odczytany za pomocą deskryptora, musisz napisać deskryptor. 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). Długość rekorduRecordLengthokreślona przez klauzulę wFileOpenfunkcji musi być większa lub równa sumie wszystkich bajtów wymaganych do zapisania danych tablicy i deskryptora tablicy. Na przykład następująca deklaracja tablicy wymaga 218 bajtów, gdy tablica jest zapisywana na dysku.Dim MyArray(4, 9) As IntegerJeśli zapisywana zmienna jest dowolnym innym typem zmiennej (a nie ciągiem o zmiennej długości lub obiektem),
FilePutzapisuje tylko dane zmiennych. Długość rekordu określona przez klauzulęRecordLengthFileOpenw funkcji musi być większa lub równa długości zapisywanych danych.FilePutzapisuje elementy struktur tak, jakby zostały napisane indywidualnie, z wyjątkiem braku wypełnienia między elementami. AtrybutVBFixedStringmożna zastosować do pól ciągów w strukturach, aby wskazać rozmiar ciągu podczas zapisywania na dysku.Note
Pola ciągów, które mają więcej bajtów niż określony przez
VBFixedStringatrybut, są obcinane podczas zapisywania na dysku,
Tryb binarny
W przypadku plików otwartych w Binary trybie większość Random reguł trybu ma zastosowanie z pewnymi wyjątkami. Następujące reguły dotyczące plików otwartych w Binary trybie różnią się od reguł trybu Random :
Klauzula
RecordLengthFileOpenw funkcji nie ma wpływu.FilePutzapisuje wszystkie zmienne na dysku stale, czyli bez uzupełniania między rekordami.W przypadku dowolnej tablicy innej niż tablica w strukturze
FilePutzapisuje tylko dane. Deskryptor nie jest zapisywany.FilePutzapisuje ciągi o zmiennej długości, które nie są elementami struktur bez deskryptora długości dwu bajtów. Liczba zapisanych bajtów jest równa liczbie znaków w ciągu. Na przykład następujące instrukcje zapisują 11 bajtów do pliku o numerze 1:Dim hellow As String = "Hello World" FilePut(1, hellow)Zapisywanie w pliku przy użyciu
FilePutfunkcji wymagaWritedostępu z wyliczenia FileIOPermissionAccess .
Zobacz też
- FileGet
- FileOpen(Int32, String, OpenMode, OpenAccess, OpenShare, Int32)
- Seek
- FileGetObject(Int32, Object, Int64)
- VBFixedStringAttribute
- Len(UInt16)
- ArgumentException
- IOException
- Writing to Files in Visual Basic
Dotyczy
FilePut(Int32, Boolean, Int64)
Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność i wydajność operacji we/wy plików niż FilePut. Aby uzyskać więcej informacji, zobacz FileSystem.
public static void FilePut(int FileNumber, bool Value, long RecordNumber = -1);
static member FilePut : int * bool * int64 -> unit
Public Sub FilePut (FileNumber As Integer, Value As Boolean, Optional RecordNumber As Long = -1)
Parametry
- FileNumber
- Int32
To jest wymagane. Dowolny prawidłowy numer pliku.
- Value
- Boolean
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.
Wyjątki
RecordNumber
< 1 i nie równe -1.
Tryb pliku jest nieprawidłowy.
Przykłady
W tym przykładzie użyto funkcji do zapisywania FilePut danych w pliku. Pięć rekordów struktury Person jest zapisywanych w pliku.
Structure Person
Public ID As Integer
Public Name As String
End Structure
Sub WriteData()
Dim PatientRecord As Person
Dim recordNumber As Integer
' Open file for random access.
FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary)
' Loop 5 times.
For recordNumber = 1 To 5
' Define ID.
PatientRecord.ID = recordNumber
' Create a string.
PatientRecord.Name = "Name " & recordNumber
' Write record to file.
FilePut(1, PatientRecord)
Next recordNumber
FileClose(1)
End Sub
Uwagi
FilePutjest prawidłowy tylko w Random trybie i .Binary
Dane zapisywane FilePut za pomocą polecenia są zwykle odczytywane z pliku przy użyciu polecenia FileGet.
Pierwszy rekord lub bajt w pliku znajduje się na pozycji 1, drugi rekord lub bajt znajduje się na pozycji 2 itd. Jeśli pominięto RecordNumber, zostanie zapisany następny rekord lub bajt po ostatniej FileGet funkcji lub FilePut wskazywany przez ostatnią Seek funkcję.
StringIsFixedLength Argument określa, czy funkcja interpretuje ciągi jako zmienne, czy stałą długość.
FilePut nie zapisuje deskryptora długości, gdy argument ma wartość True. Jeśli używasz polecenia StringIsFixedLength = True z elementem FilePut, musisz wykonać to samo z elementem FileGeti musisz 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
RecordLengthklauzuliFileOpenfunkcji,FilePutzapisuje 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 określić ilości danych uzupełniania z pewnością, 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 wRecordLengthklauzuliFileOpenfunkcji, zostanie zgłoszony wyjątek.Jeśli zapisywana zmienna jest ciągiem,
FilePutzapisuje deskryptor dwu bajtowy zawierający długość ciągu, a następnie zapisuje dane, które przechodzą do zmiennej. W związku z tym długość rekordu określona przez klauzulęRecordLengthwFileOpenfunkcji musi wynosić co najmniej dwa bajty większe niż rzeczywista długość ciągu.Jeśli zapisywana zmienna jest obiektem zawierającym typ liczbowy,
FilePutzapisuje dwa bajty identyfikująceVarTypeobiekt, a następnie zapisuje zmienną. Na przykład podczas pisania obiektu zawierającego liczbę całkowitąFilePutzapisuje sześć bajtów: dwa bajty identyfikujące obiekt jakoVarType(3)(Integer) i cztery bajty zawierające dane. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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,
FilePutzapisuje deskryptor dwu bajtowy identyfikującyVarType(8)obiekt, deskryptor dwu bajtowy wskazujący długość ciągu, a następnie zapisuje dane ciągu. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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ćTruego do parametruStringIsFixedLength, a odczytany ciąg powinien być prawidłową długością.Jeśli zapisywana zmienna jest tablicą, możesz wybrać, czy napisać deskryptor dla rozmiaru i wymiarów tablicy. Visual Basic 6.0 i starszych wersjach zapisują deskryptor plików dla tablicy dynamicznej, ale nie dla tablicy o stałym rozmiarze. Visual Basic 2005 domyślnie nie zapisuje deskryptora. Aby napisać deskryptor, ustaw
ArrayIsDynamicparametr naTruewartość . Podczas zapisywania tablicy należy dopasować sposób odczytywania tablicy; jeśli zostanie odczytany za pomocą deskryptora, musisz napisać deskryptor. 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). Długość rekorduRecordLengthokreślona przez klauzulę wFileOpenfunkcji musi być większa lub równa sumie wszystkich bajtów wymaganych do zapisania danych tablicy i deskryptora tablicy. Na przykład następująca deklaracja tablicy wymaga 218 bajtów, gdy tablica jest zapisywana na dysku.Dim MyArray(4, 9) As IntegerJeśli zapisywana zmienna jest dowolnym innym typem zmiennej (a nie ciągiem o zmiennej długości lub obiektem),
FilePutzapisuje tylko dane zmiennych. Długość rekordu określona przez klauzulęRecordLengthFileOpenw funkcji musi być większa lub równa długości zapisywanych danych.FilePutzapisuje elementy struktur tak, jakby zostały napisane indywidualnie, z wyjątkiem braku wypełnienia między elementami. AtrybutVBFixedStringmożna zastosować do pól ciągów w strukturach, aby wskazać rozmiar ciągu podczas zapisywania na dysku.Note
Pola ciągów, które mają więcej bajtów niż określony przez
VBFixedStringatrybut, są obcinane podczas zapisywania na dysku,
Tryb binarny
W przypadku plików otwartych w Binary trybie większość Random reguł trybu ma zastosowanie z pewnymi wyjątkami. Następujące reguły dotyczące plików otwartych w Binary trybie różnią się od reguł trybu Random :
Klauzula
RecordLengthFileOpenw funkcji nie ma wpływu.FilePutzapisuje wszystkie zmienne na dysku stale, czyli bez uzupełniania między rekordami.W przypadku dowolnej tablicy innej niż tablica w strukturze
FilePutzapisuje tylko dane. Deskryptor nie jest zapisywany.FilePutzapisuje ciągi o zmiennej długości, które nie są elementami struktur bez deskryptora długości dwu bajtów. Liczba zapisanych bajtów jest równa liczbie znaków w ciągu. Na przykład następujące instrukcje zapisują 11 bajtów do pliku o numerze 1:Dim hellow As String = "Hello World" FilePut(1, hellow)Zapisywanie w pliku przy użyciu
FilePutfunkcji wymagaWritedostępu z wyliczenia FileIOPermissionAccess .
Zobacz też
- FileGet
- FileOpen(Int32, String, OpenMode, OpenAccess, OpenShare, Int32)
- Seek
- FileGetObject(Int32, Object, Int64)
- VBFixedStringAttribute
- Len(UInt16)
- ArgumentException
- IOException
- Writing to Files in Visual Basic
Dotyczy
FilePut(Int32, Int16, Int64)
Zapisuje dane ze zmiennej do pliku dysku. Ta My funkcja zapewnia lepszą wydajność i wydajność operacji we/wy plików niż FilePut. Aby uzyskać więcej informacji, zobacz FileSystem.
public static void FilePut(int FileNumber, short Value, long RecordNumber = -1);
static member FilePut : int * int16 * int64 -> unit
Public Sub FilePut (FileNumber As Integer, Value As Short, Optional RecordNumber As Long = -1)
Parametry
- FileNumber
- Int32
To jest wymagane. Dowolny prawidłowy numer pliku.
- Value
- Int16
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.
Wyjątki
RecordNumber
< 1 i nie równe -1.
Tryb pliku jest nieprawidłowy.
Przykłady
W tym przykładzie użyto funkcji do zapisywania FilePut danych w pliku. Pięć rekordów struktury Person jest zapisywanych w pliku.
Structure Person
Public ID As Integer
Public Name As String
End Structure
Sub WriteData()
Dim PatientRecord As Person
Dim recordNumber As Integer
' Open file for random access.
FileOpen(1, "C:\TESTFILE.txt", OpenMode.Binary)
' Loop 5 times.
For recordNumber = 1 To 5
' Define ID.
PatientRecord.ID = recordNumber
' Create a string.
PatientRecord.Name = "Name " & recordNumber
' Write record to file.
FilePut(1, PatientRecord)
Next recordNumber
FileClose(1)
End Sub
Uwagi
FilePutjest prawidłowy tylko w Random trybie i .Binary
Dane zapisywane FilePut za pomocą polecenia są zwykle odczytywane z pliku przy użyciu polecenia FileGet.
Pierwszy rekord lub bajt w pliku znajduje się na pozycji 1, drugi rekord lub bajt znajduje się na pozycji 2 itd. Jeśli pominięto RecordNumber, zostanie zapisany następny rekord lub bajt po ostatniej FileGet funkcji lub FilePut wskazywany przez ostatnią Seek funkcję.
StringIsFixedLength Argument określa, czy funkcja interpretuje ciągi jako zmienne, czy stałą długość.
FilePut nie zapisuje deskryptora długości, gdy argument ma wartość True. Jeśli używasz polecenia StringIsFixedLength = True z elementem FilePut, musisz wykonać to samo z elementem FileGeti musisz 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
RecordLengthklauzuliFileOpenfunkcji,FilePutzapisuje 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 określić ilości danych uzupełniania z pewnością, 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 wRecordLengthklauzuliFileOpenfunkcji, zostanie zgłoszony wyjątek.Jeśli zapisywana zmienna jest ciągiem,
FilePutzapisuje deskryptor dwu bajtowy zawierający długość ciągu, a następnie zapisuje dane, które przechodzą do zmiennej. W związku z tym długość rekordu określona przez klauzulęRecordLengthwFileOpenfunkcji musi wynosić co najmniej dwa bajty większe niż rzeczywista długość ciągu.Jeśli zapisywana zmienna jest obiektem zawierającym typ liczbowy,
FilePutzapisuje dwa bajty identyfikująceVarTypeobiekt, a następnie zapisuje zmienną. Na przykład podczas pisania obiektu zawierającego liczbę całkowitąFilePutzapisuje sześć bajtów: dwa bajty identyfikujące obiekt jakoVarType(3)(Integer) i cztery bajty zawierające dane. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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,
FilePutzapisuje deskryptor dwu bajtowy identyfikującyVarType(8)obiekt, deskryptor dwu bajtowy wskazujący długość ciągu, a następnie zapisuje dane ciągu. Długość rekorduRecordLengthokreślona przez parametr wFileOpenfunkcji 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ćTruego do parametruStringIsFixedLength, a odczytany ciąg powinien być prawidłową długością.Jeśli zapisywana zmienna jest tablicą, możesz wybrać, czy napisać deskryptor dla rozmiaru i wymiarów tablicy. Visual Basic 6.0 i starszych wersjach zapisują deskryptor plików dla tablicy dynamicznej, ale nie dla tablicy o stałym rozmiarze. Visual Basic 2005 domyślnie nie zapisuje deskryptora. Aby napisać deskryptor, ustaw
ArrayIsDynamicparametr naTruewartość . Podczas zapisywania tablicy należy dopasować sposób odczytywania tablicy; jeśli zostanie odczytany za pomocą deskryptora, musisz napisać deskryptor. 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). Długość rekorduRecordLengthokreślona przez klauzulę wFileOpenfunkcji musi być większa lub równa sumie wszystkich bajtów wymaganych do zapisania danych tablicy i deskryptora tablicy. Na przykład następująca deklaracja tablicy wymaga 218 bajtów, gdy tablica jest zapisywana na dysku.Dim MyArray(4, 9) As IntegerJeśli zapisywana zmienna jest dowolnym innym typem zmiennej (a nie ciągiem o zmiennej długości lub obiektem),
FilePutzapisuje tylko dane zmiennych. Długość rekordu określona przez klauzulęRecordLengthFileOpenw funkcji musi być większa lub równa długości zapisywanych danych.FilePutzapisuje elementy struktur tak, jakby zostały napisane indywidualnie, z wyjątkiem braku wypełnienia między elementami. AtrybutVBFixedStringmożna zastosować do pól ciągów w strukturach, aby wskazać rozmiar ciągu podczas zapisywania na dysku.Note
Pola ciągów, które mają więcej bajtów niż określony przez
VBFixedStringatrybut, są obcinane podczas zapisywania na dysku,
Tryb binarny
W przypadku plików otwartych w Binary trybie większość Random reguł trybu ma zastosowanie z pewnymi wyjątkami. Następujące reguły dotyczące plików otwartych w Binary trybie różnią się od reguł trybu Random :
Klauzula
RecordLengthFileOpenw funkcji nie ma wpływu.FilePutzapisuje wszystkie zmienne na dysku stale, czyli bez uzupełniania między rekordami.W przypadku dowolnej tablicy innej niż tablica w strukturze
FilePutzapisuje tylko dane. Deskryptor nie jest zapisywany.FilePutzapisuje ciągi o zmiennej długości, które nie są elementami struktur bez deskryptora długości dwu bajtów. Liczba zapisanych bajtów jest równa liczbie znaków w ciągu. Na przykład następujące instrukcje zapisują 11 bajtów do pliku o numerze 1:Dim hellow As String = "Hello World" FilePut(1, hellow)Zapisywanie w pliku przy użyciu
FilePutfunkcji wymagaWritedostępu z wyliczenia FileIOPermissionAccess .
Zobacz też
- FileGet
- FileOpen(Int32, String, OpenMode, OpenAccess, OpenShare, Int32)
- Seek
- FileGetObject(Int32, Object, Int64)
- VBFixedStringAttribute
- Len(UInt16)
- ArgumentException
- IOException
- Writing to Files in Visual Basic