FileSystem.FileGetObject(Int32, Object, Int64) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將開放磁碟檔案的資料讀取到變數中。 相較於 FileGetObject
,My
功能可提升檔案 I/O 作業的產能和效能。 如需詳細資訊,請參閱FileSystem。
public static void FileGetObject (int FileNumber, ref object Value, long RecordNumber = -1);
static member FileGetObject : int * obj * int64 -> unit
Public Sub FileGetObject (FileNumber As Integer, ByRef Value As Object, Optional RecordNumber As Long = -1)
參數
- FileNumber
- Int32
必要。 任何有效的檔案數目。
- Value
- Object
必要。 有效的變數名稱,資料將讀取至其中。
- RecordNumber
- Int64
選擇性。 要開始讀取的資料錄數目 (Random
模式檔案) 或位元組數目 (Binary
模式檔案)。
範例
下列範例會將記錄讀入測試檔案,然後擷取記錄。
Dim c As Object = "test"
FileSystem.FileOpen(1, "test.dat", OpenMode.Binary)
FileSystem.FilePutObject(1, "ABCDEF")
FileSystem.Seek(1, 1)
FileSystem.FileGetObject(1, c)
MsgBox(c)
FileSystem.FileClose(1)
備註
如果傳回型別而不是另一種類型Object
,例如Integer
、Long
、 Short
等等,則會FileGetObject
使用 FileGet
函式來避免在編譯時期發生模棱兩可的情況。
如果您要寫出 Variant
類型, FileGetObject
則需要 。 不確定時,如果您針對第二個參數使用 物件,則一律建議您使用 FilePutObject
和 FileGetObject
。
FileGetObject
只有在和 Binary
模式中Random
才有效。
使用 FileGetObject
讀取的數據通常會使用 FilePutObject
來寫入。
檔案中的第一筆記錄或位元組位於位置 1、第二筆記錄或位元組位於位置 2,依此類故。 如果您省略 RecordNumber
, FileGetObject
則會讀取最後 FileGetObject
一個 或 FilePutObject
函式 (或最後一個 Seek
函式所指向的記錄或位元組) 。
隨機模式
針對以 Random
模式開啟的檔案,適用下列規則:
如果讀取的數據長度小於函式子句
FileOpen
中指定的RecordLength
長度,FileGetObject
則會讀取記錄長度界限的後續記錄。 一筆記錄結尾與下一筆記錄開頭之間的空間會填補檔案緩衝區的現有內容。 因為無法精確地判斷填補數據量,所以最好讓記錄長度符合所讀取數據的長度。如果所讀取的變數是字串,則預設
FileGetObject
會讀取包含字元串長度的雙位元組描述元,然後讀取進入變數的數據。 因此,函式子句FileOpen
所RecordLength
指定的記錄長度必須至少為兩個大於字元串實際長度的位元組。 Visual Basic 6.0 和舊版支援固定長度字元串,以及讀取檔案時,不會寫入長度描述元。 如果您想要讀取不含描述元的字串,您應該傳遞True
至StringIsFixedLength
參數,而您讀取的字串應該是正確的長度。如果要讀取的變數是數位,則函式中
FileOpen
參數所RecordLength
指定的記錄長度必須大於或等於寫入數位資料和數位描述元所需的所有位元組總和。 描述項會指定陣列的排名、大小,以及每個排名的下限。 其長度等於 2 加上維度數目的 8 倍:2 + 8 * NumberOfDimensions。例如,當陣列寫入磁碟時,下列陣列宣告需要 218 個字節:
Dim MyArray(4, 9) As Integer
218 個字節的散發方式如下:描述符 (2 + 8 * 2) 的 18 個字節,以及 100 個字節的數據 (5 * 10 * 4) 。
FileGetObject
會讀取結構的專案,就像是個別讀取每個元素一樣,不同之處在於元素之間沒有填補。 在磁碟上,使用者定義型別中的動態數位 (以FilePutObject
) 撰寫,其長度等於 2 加上維度數目 8 倍的描述元前置詞:2 + 8 * NumberOfDimensions。 函式中FileOpen
子句指定的RecordLength
記錄長度必須大於或等於讀取個別專案所需的所有位元組總和,包括任何陣列及其描述元。 類別 VBFixedStringAttribute 可以套用至結構中的字串字段,以指出寫入磁碟時字元串的大小。
二進位模式
針對以 Binary
模式開啟的檔案,所有 Random
規則都會套用,但有下列例外:
函
RecordLength
式中的FileOpen
子句沒有任何作用。FileGetObject
連續讀取磁碟的所有變數,也就是說,記錄之間沒有填補。對於結構中陣列以外的任何陣列,
FileGetObject
則只會讀取數據。 沒有讀取描述項。
FileGetObject
會讀取非結構元素的可變長度字元串,而不需要預期雙位元組長度描述元。 讀取的位元組數目等於字串中已經有的字元數。
重要
從檔案讀取時,請勿根據擴展名來決定檔案的內容。 例如,名為 Form1.vb 的檔案可能不是 Visual Basic 原始程式檔。