Share via


FileGet 函式

更新:2007 年 11 月

自開啟的磁碟檔讀取資料至變數中。

My 功能提供比 FileGet 更優越的檔案 I/O 作業產能和效能。如需詳細資訊,請參閱 My.Computer.FileSystem 物件

Public Overloads Sub FileGet( _
   ByVal FileNumber As Integer, _
   ByRef Value As Object, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
   ByVal FileNumber As Integer, _
   ByRef Value As Short, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
   ByVal FileNumber As Integer, _
   ByRef Value As Integer, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
   ByVal FileNumber As Integer, _
   ByRef Value As Single, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
   ByVal FileNumber As Integer, _
   ByRef Value As Double, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
   ByVal FileNumber As Integer, _
   ByRef Value As Decimal, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
   ByVal FileNumber As Integer, _
   ByRef Value As Byte, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
   ByVal FileNumber As Integer, _
   ByRef Value As Boolean, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
   ByVal FileNumber As Integer, _
   ByRef Value As Date, _
   Optional RecordNumber As Integer = -1 _
)
' -or-
Public Overloads Sub FileGet( _
   ByVal FileNumber As Integer, _
   ByRef Value As System.Array, _
   Optional RecordNumber As Integer = -1, _
   Optional ArrayIsDynamic As Boolean = False _
)
' -or-
Public Overloads Sub FileGet(
   ByVal FileNumber As Integer, _
   ByRef Value As String, _
   Optional RecordNumber As Integer = -1, _
   Optional StringIsFixedLength As Boolean = False _
)

參數

  • FileNumber
    必要項。任何有效的檔案號碼。

  • Value
    必要項。儲存讀取資料的有效變數名稱。

  • RecordNumber
    選擇項,開始讀取的資料錄編號 (Random 模式檔案) 或位元組編號 (Binary 模式檔案)。

  • ArrayIsDynamic
    選擇項,只有在編寫陣列時才適用。指定是否將陣列視為動態 (Dynamic),以及是否有必要指定描述陣列大小和界限的陣列描述項。

  • StringIsFixedLength
    選擇項,只有在編寫字串時才適用。指定是否要為字串寫入描述長度的雙位元組描述項。預設值為 False。

例外狀況

例外狀況類型

錯誤代碼

狀況

ArgumentException

63

RecordNumber < 1,且不等於 -1。

IOException

52

FileNumber 不存在。

IOException

54

檔案模式無效。

如果將使用非結構化錯誤處理的 Visual Basic 6.0 應用程式升級,請參閱「錯誤代碼」資料行 (您可以將錯誤代碼與 Number 屬性 (Err 物件) 比對)。但是,請盡可能考慮以Visual Basic 的結構化例外處理概觀取代這類錯誤控制項。

備註

FileGet 只在 Random 和 Binary 模式中有效。

以 FileGet 讀取的資料通常都會以 FilePut 寫入檔案。

檔案中的第一個資料錄或位元組位於位置 1,第二個資料錄或位元組則在位置 2,以此類推。如果您省略 RecordNumber,則會讀取接在上一個 FileGet 或 FilePut 函式之後 (或由上一個 Seek 函式所指向) 的下一筆資料錄或下一個位元組。

安全性注意事項:

讀取檔案時,請勿根據副檔名來決定檔案內容。例如,名稱為 Form1.vb 的檔案未必是 Visual Basic 的原始程式檔 (Source File)。

Random 模式

下列規則適用於在 Random 模式下開啟的檔案:

  • 如果所讀取資料的長度小於 FileOpen 函式中 RecordLength 子句所指定的長度,則 FileGet 會以資料錄長度界限讀取後續的資料錄。資料錄結尾與下一筆資料錄開頭間的空白將以目前檔案緩衝區的內容填補。因為無法以任何確實方式來判斷填補的數量,所以通常最好讓資料錄長度與所讀取資料的長度相符。

  • 根據預設,如果讀入的變數是一個字串,FileGet 會讀取包含字串長度的雙位元組描述項,然後再讀取傳到變數中的資料。因此,FileOpen 函式的 RecordLength 子句所指定的資料錄長度,至少必須比字串的實際長度多兩個位元組。Visual Basic 6.0 及更早的版本會支援固定長度的字串。將此類字串置入檔案時,並不會寫入長度描述項。如果想讀取不含描述項的字串,則您應該傳遞 True 給 StringIsFixedLength 參數,且所讀入的字串應為正確長度。

  • 如果所讀入的變數是一個陣列,則您可以選擇是否讀取陣列的大小及維度的描述項。若要寫入描述項,請將 ArrayIsDynamic 參數設定為 True。讀取陣列時,您必須配合陣列寫入的方式。如果陣列在寫入時包含描述項,您就必須讀取描述項。如果沒有使用描述項,則會由傳遞至 FileGet 之陣列的大小和界限決定要讀取何者。

    描述項會指定陣列的陣序規範,每個陣序規範的大小和下限。其長度等於 2 加 8 乘以維度的數目:(2 + 8 * NumberOfDimensions)。FileOpen 函式中 RecordLength 參數所指定的資料錄長度,必須大於或等於寫入陣列資料和陣列描述項所需的所有位元組總和。例如,將陣列寫入磁碟時,下列陣列宣告需要 218 個位元組。

    Dim MyArray(4,9) As Integer
    

    218 位元組的分散如下:

    • 18 個位元組供描述項使用:(2 + 8 * 2)

    • 200 個位元組供資料使用:(5 * 10 * 4)。

  • 如果寫入的變數是其他任何型別的變數 (非變動長度字串或物件),FileGet 只會讀取變數資料。FileOpen 函式中 RecordLength 子句所指定的資料錄長度必須大於或等於所讀取資料的長度。

  • FileGet 讀取結構元素的方式,就像是每個元素是個別讀取的一樣 (除了元素間沒有任何填補外)。在磁碟中,使用者定義型別的動態陣列 (以 FilePut 寫入) 是以其長度等於 2 加 8 乘以維度數的描述項當做前置字元:(2 + 8 * NumberOfDimensions)。FileOpen 函式之 RecordLength 子句所指定的資料錄長度,必須大於或等於讀取個別項目所需的所有位元組總和。這包括任何陣列及其描述項。VBFixedString 屬性 (Attribute) 可套用於結構中的字串欄位,用來表示字串寫入磁碟時的大小。

二進位模式

對於在 Binary 模式下開啟的檔案,多數的 Binary 模式規則都適用,只有一些例外。在 Binary 模式中開啟的檔案所適用的下列規則與 Random 模式的規則不同:

  • FileOpen 函式中的 RecordLength 子句不具有任何影響效果。FileGet 會從磁碟中連續讀取所有變數,也就是說,資料錄之間沒有填補。

  • 對於非結構中陣列的其他陣列,FileGet 只會讀取資料。不會讀取描述項。

  • FileGet 在讀取非結構項目的可變長度字串時,不會預期讀到雙位元組的長度描述項。讀取的位元組數等於已存在於字串中的字元數。

    安全性注意事項:

    使用 FileGet 函式讀取檔案,需要 FileIOPermissionAccess 列舉型別的 Read 存取權限。

智慧型裝置開發人員注意事項

不支援這個函式。

需求

命名空間Microsoft.VisualBasic

**模組︰**FileSystem

組件:Visual Basic Runtime Library (在 Microsoft.VisualBasic.dll 中)

請參閱

參考

FileOpen 函式

FilePut 函式

Seek 函式

FileGetObject 函式

其他資源

在 Visual Basic 中讀取檔案

在 Visual Basic 中寫入檔案