Share via


FileSystem.FileGetObject(Int32, Object, Int64) 方法

定義

將開放磁碟檔案的資料讀取到變數中。 相較於 FileGetObjectMy 功能可提升檔案 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,例如IntegerLongShort等等,則會FileGetObject使用 FileGet 函式來避免在編譯時期發生模棱兩可的情況。

如果您要寫出 Variant 類型, FileGetObject 則需要 。 不確定時,如果您針對第二個參數使用 物件,則一律建議您使用 FilePutObjectFileGetObject

FileGetObject只有在和 Binary 模式中Random才有效。

使用 FileGetObject 讀取的數據通常會使用 FilePutObject來寫入。

檔案中的第一筆記錄或位元組位於位置 1、第二筆記錄或位元組位於位置 2,依此類故。 如果您省略 RecordNumberFileGetObject 則會讀取最後 FileGetObject 一個 或 FilePutObject 函式 (或最後一個 Seek 函式所指向的記錄或位元組) 。

隨機模式

針對以 Random 模式開啟的檔案,適用下列規則:

  • 如果讀取的數據長度小於函式子句FileOpen中指定的RecordLength長度,FileGetObject則會讀取記錄長度界限的後續記錄。 一筆記錄結尾與下一筆記錄開頭之間的空間會填補檔案緩衝區的現有內容。 因為無法精確地判斷填補數據量,所以最好讓記錄長度符合所讀取數據的長度。

  • 如果所讀取的變數是字串,則預設 FileGetObject 會讀取包含字元串長度的雙位元組描述元,然後讀取進入變數的數據。 因此,函式子句FileOpenRecordLength指定的記錄長度必須至少為兩個大於字元串實際長度的位元組。 Visual Basic 6.0 和舊版支援固定長度字元串,以及讀取檔案時,不會寫入長度描述元。 如果您想要讀取不含描述元的字串,您應該傳遞 TrueStringIsFixedLength 參數,而您讀取的字串應該是正確的長度。

  • 如果要讀取的變數是數位,則函式中 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 原始程式檔。

適用於

另請參閱