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
    省略可能です。配列を書き込む場合にだけ適用されます。配列を動的に処理するかどうか、および配列のサイズと境界を表す配列記述子が必要かどうかを指定します。

  • StringIsFixedLength
    省略可能です。文字列を書き込む場合にだけ適用されます。文字列の長さを表す 2 バイトの記述子を書き込むかどうかを指定します。既定では 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 番目のレコード番号またはバイト位置は 2 になります。引数 RecordNumber を省略すると、最後に呼び出した FileGet 関数または FilePut 関数、あるいは最後に呼び出した Seek 関数が示す位置の次のレコードまたはデータが読み込まれます。

3acfheek.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

ファイルからデータを読み取るときは、ファイル名の拡張子に基づいてファイルの内容を判断しないでください。たとえば、Form1.vb という名前のファイルが Visual Basic のソース ファイルとは限りません。

Random モード

Random モードで開いたファイルに対しては、次の規則が適用されます。

  • 読み込むデータの長さが FileOpen 関数ステートメントの RecordLength 句で指定したレコード長よりも短ければ、FileGet 関数はレコード長の終端から次のレコードを読み込むことができます。レコードの終わりと次のレコードの先頭の間には、ファイル バッファの内容が埋め込まれます。埋め込まれるデータの量は正確に指定できないため、通常はレコード長を読み込むデータ長に合わせます。

  • 文字列変数を使う場合、FileGet 関数は、既定では文字列の長さを示す 2 バイトの記述子を読み込んでから、変数に格納するデータを読み込みます。したがって、FileOpen 関数の RecordLength 句では、文字列の実際の長さより 2 バイト以上大きい値を指定する必要があります。Visual Basic 6.0 以前のバージョンは固定長文字列をサポートしており、ファイルに書き込む場合、長さ記述子は書き込まれません。記述子なしで文字列を読み込む場合は、パラメータ StringIsFixedLength に True を渡します。この場合は、読み込む文字列の長さは正しいことが必要です。

  • 配列型の変数を使う場合は、配列のサイズと次元を表す記述子を読み込むかどうかを選択できます。記述子を書き込むには、パラメータ 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 属性を構造体内の文字列フィールドに適用すると、ディスクに書き込むときに文字列のサイズを示すことができます。

Binary モード

Binary モードで開かれているファイルでは、Random モードの規則のほとんどが適用されますが、いくつか例外があります。ファイルを Binary モードで開いた場合に適用される、Random モードとは異なる規則を次に示します。

  • FileOpen 関数の RecordLength 句は何もしません。FileGet はすべての変数をディスクから連続して読み込みます。つまり、レコードの間に何も埋め込みません。

  • 構造体配列以外の配列の場合、FileGet 関数はデータだけを読み込みます。記述子は読み込みません。

  • 構造体の要素でない可変長文字列を使用する場合、FileGet 関数は、2 バイトの記述子を読み込みません。読み込まれるバイト数は、文字列内の文字数と同じです。

    3acfheek.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

    FileGet 関数を使ってファイルを読み込むには、FileIOPermissionAccess 列挙体の Read アクセスが必要です。

スマート デバイス開発者のためのメモ

この関数はサポートされていません。

必要条件

名前空間 : Microsoft.VisualBasic

モジュール : FileSystem

アセンブリ : Visual Basic ランタイム ライブラリ (Microsoft.VisualBasic.dll)

参照

参照

FileOpen 関数

FilePut 関数

Seek 関数

FileGetObject 関数

その他の技術情報

Visual Basic でのファイルの読み取り

Visual Basic でのファイルへの書き込み