FilePutObject 函式
更新:2007 年 11 月
將變數資料寫入磁碟檔案。
My 功能在檔案 I/O 作業中的產能和效能勝過 FilePutObject。如需詳細資訊,請參閱 My.Computer.FileSystem 物件。
Public Sub FilePutObject( _ FileNumber As Integer, _ Value As Object, _ RecordNumber As Integer = -1 _ ) ' -or- Overloads Public Sub FilePutObject( _ FileNumber As Integer, _ Value As Short, _ Optional RecordNumber As Integer = -1 _ ) ' -or- Overloads Public Sub FilePutObject( _ FileNumber As Integer, _ Value As Integer, _ Optional RecordNumber As Integer = -1 _ ) ' -or- Overloads Public Sub FilePutObject( _ FileNumber As Integer, _ Value As Single, _ Optional RecordNumber As Integer = -1 _ ) ' -or- Overloads Public Sub FilePutObject( _ FileNumber As Integer, _ Value As Double, _ RecordNumber As Integer = -1 _ ) ' -or- Overloads Public Sub FilePutObject( _ FileNumber As Integer, _ Value As Decimal, _ Optional RecordNumber As Integer = -1 _ ) ' -or- Overloads Public Sub FilePutObject( _ FileNumber As Integer, _ Value As Byte, _ Optional RecordNumber As Integer = -1 _ ) ' -or- Overloads Public Sub FilePutObject( _ FileNumber As Integer, _ Value As Boolean, _ Optional RecordNumber As Integer = -1 _ ) ' -or- Overloads Public Sub FilePutObject( _ FileNumber As Integer, _ Value As Date, _ Optional RecordNumber As Integer = -1 _ ) ' -or- Overloads Public Sub FilePutObject( _ FileNumber As Integer, _ Value As System.Array, _ Optional RecordNumber As Integer = -1, _ Optional ArrayIsDynamic As Boolean = False _ ) ' -or- Overloads Public Sub FilePutObject( _ FileNumber As Integer, _ Value As String, _ Optional RecordNumber As Integer = -1, _ Optional StringIsFixedLength As Boolean = False _ )
參數
FileNumber
必要項。任何有效的檔案號碼。Value
必要項。有效的變數名稱,該名稱包含已寫入磁碟的資料。RecordNumber
選擇項。寫入開始的資料錄號碼 (Random 模式檔案) 或位元組號碼 (Binary 模式檔案)。ArrayIsDynamic
選擇項。只有在編寫陣列時才適用。指定是否將陣列視為動態 (Dynamic),及是否寫入字串的陣列描述項來描述長度。StringIsFixedLength
選擇項。只有在編寫字串時才適用。指定是否要為字串寫入描述長度的描述項。預設值為 False。
備註
如果傳遞的是 Object 型別,而非其他型別,例如 Integer、Long、Short 等,則會使用 FilePutObject 函式來取代 FilePut,以避免在編譯時間產生語意模糊的情況。
FilePutObject 會寫入及讀取描述物件的描述項。如果您想要寫出 Variant 型別,則 FilePutObject 是必要項。在不確定時,如果您要使用物件來做為第二個參數,則使用 FilePutObject 和 FileGetObject 永遠是比較安全的作法。
FilePutObject 只在 Random 和 Binary 模式中有效。
以 FilePutObject 寫入的資料,通常都會使用 FileGetObject 自檔案中讀取。
檔案中的第一個資料錄或位元組位於位置 1,第二個資料錄或位元組則在位置 2,以此類推。如果您省略 RecordNumber,則 FilePutObject 會在最後的 FileGetObject 或 FilePutObject 函式 (或最後的 Seek 函式所指向的資料錄或位元組) 之後,寫入下一筆資料錄或位元組。
StringIsFixedLength 引數會控制函式是否要將字串解譯為變數或固定長度。FilePutObject 在引數為 True 時不會寫入長度描述項。如果您將 StringIsFixedLength = True 和 FilePutObject 搭配使用,則您也必須對 FileGetObject 執行相同動作,而且還必須確定字串會初始化為預期的長度。
Random 模式
下列規則適用於在 Random 模式下開啟的檔案:
如果寫入資料的長度小於 FileOpen 函式之 RecordLength 子句所指定的長度,則 FilePutObject 會以資料錄長度界限寫入後續的資料錄。資料錄結尾與下一筆資料錄開始間的空白將以目前檔案緩衝區的內容填補。因為無法準確判斷填補資料的數量,所以通常可以將資料錄的長度設為寫入資料的長度。如果寫入資料的長度比 FileOpen 函式的 RecordLength 子句中所指定的長度還長,便會傳回例外狀況。
如果寫入的變數是個包含數字型別 (Numeric Type) 的物件,則 FilePutObject 會寫入用於辨識物件 VarType 的兩個位元組,再寫入變數。例如,當寫入包含整數的物件時,FilePutObject 會寫入六個位元組:兩個位元組用於將此物件識別為 VarType(3) (Integer),而其他四個位元組用於包含資料。FileOpen 函式之 RecordLength 參數所指定的資料錄長度,至少要大於儲存變數所需之實際位元組數的兩個位元組。
如果寫入的變數是一個包含字串的物件,則 FilePutObject 會寫入一個雙位元組的描述項來識別物件的 VarType(8),以及一個雙位元組的描述項來表示字串的長度,然後再寫入字串資料。在 FileOpen 函式中,由 RecordLength 參數所指定的資料錄長度,必須至少比字串的實際長度還大四個位元組。如果想要置入不含描述項的字串,則您應該傳遞 True 給 StringIsFixedLength 參數,而且所讀入的字串應有正確的長度。
如果被寫入的變數是一個陣列,則您可以選擇為陣列的大小及維度寫入描述項。Visual Basic 6.0 及較舊的版本會為動態陣列寫入檔案描述項,但不會為固定大小的陣列寫入檔案描述項,而 Visual Basic 則預設為不寫入描述項。若要寫入描述項,請將 ArrayIsDynamic 參數設定為 True。在寫入陣列時,您需要配合陣列被讀取的方式;如果它是以描述項來讀取,您就必須寫入描述項。描述項會指定陣列的陣序規範,每個陣序規範的大小和下限。其長度等於 2 加 8 乘以維度的數目:(2 + 8 * NumberOfDimensions)。FileOpen 函式之 RecordLength 子句所指定的資料錄長度,必須大於或等於寫入陣列資料和陣列描述項所需的所有位元組總和。
二進位模式
對於在 Binary 模式下開啟的檔案而言,所有的 Random 模式規則都適用,但下列除外:
- FileOpen 函式中的 RecordLength 子句沒有作用。FilePutObject 會將所有變數連續寫入磁碟中,也就是說資料錄間沒有填補。
範例
這個範例使用 FilePutObject 函式,將字串寫入檔案中。
Sub WriteData()
Dim text As String = "test"
FileOpen(1, "test.bin", OpenMode.Binary)
FilePutObject(1, text)
FileClose(1)
End Sub
智慧型裝置開發人員注意事項
不支援這個函式。
需求
命名空間 (Namespace)︰Microsoft.VisualBasic
**模組︰**FileSystem
組件 (Assembly):Visual Basic Runtime Library (在 Microsoft.VisualBasic.dll 中)