FilePutObject 関数

更新 : 2007 年 11 月

変数の内容をディスク上のファイルに書き込みます。

My 機能により、FilePutObject よりも、ファイルの I/O 操作の生産性とパフォーマンスが向上します。詳細については、「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
    省略可能です。配列を書き込む場合にだけ適用されます。配列を動的に処理するかどうか、および配列の長さを表す文字列に配列記述子を書き込むかどうかを指定します。

  • StringIsFixedLength
    省略可能です。文字列を書き込む場合にだけ適用されます。文字列の長さを表す記述子を書き込むかどうかを指定します。既定は False です。

解説

整数型 (Integer)、長整数型 (Long)、Short 型 (Short) などではなくオブジェクト型 (Object) が渡される場合は、FilePut 関数の代わりに FilePutObject 関数を使って、コンパイル時のあいまいさを回避します。

FilePutObject は、オブジェクトを記述する記述子の書き込みおよび読み取りを行います。バリアント型 (Variant) を書き出す場合は、FilePutObject を使う必要があります。判断に迷った場合は、2 番目のパラメータにオブジェクトを使っているときは FilePutObject と FileGetObject を使った方が安全です。

FilePutObject は、Random モードおよび Binary モードの場合にだけ有効です。

通常、FilePutObject 関数を使用して書き込んだデータは、FileGetObject 関数で読み込みます。

ファイルの中で先頭のレコード番号またはバイト位置は 1 になり、2 番目のレコード番号またはバイト位置は 2 になります。引数 RecordNumber を省略すると、最後に呼び出した FileGetObject 関数または FilePutObject 関数、あるいは最後に呼び出した Seek 関数が示す位置の次のレコードまたはバイトが書き込まれます。

StringIsFixedLength 引数は、関数が文字列を可変長と固定長どちらで解釈するかを制御します。引数が True のとき、FilePutObject は長さの記述子を書き込みません。FilePutObject で StringIsFixedLength = True を指定した場合は、FileGetObject でも同じように指定する必要があります。また、文字列が正しい長さに初期化されているかどうかを確認する必要もあります。

ランダム モード

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

  • 書き込むデータの長さが FileOpen 関数の RecordLength 句で指定した長さを超えない限り、FilePutObject 関数は次のレコードを直前のレコードの終端から書き込みます。レコードの終わりと次のレコードの先頭の間には、ファイル バッファの内容が埋め込まれます。埋め込まれるデータ量は正確にわからないので、通常は書き込まれているデータの長さにレコード長を合わせます。書き込むデータの長さが FileOpen 関数の RecordLength 句で指定した長さを超えると、例外が発生します。

  • 書き込む変数が数値型を格納するオブジェクトである場合、FilePutObject 関数は、オブジェクトの VarType を表す 2 バイトのデータを書き込み、次に変数のデータを書き込みます。たとえば、整数型を格納するオブジェクトを書き込む場合、FilePutObject 関数は 6 バイトを書き込みます。内訳は、VarType(3) (Integer) を示す 2 バイトと、データを格納する 4 バイトです。FileOpen 関数のパラメータ RecordLengthには、実際にデータを格納するために必要なバイト数より 2 バイト以上大きい値を指定する必要があります。

  • 文字列を格納するオブジェクト型の変数を使う場合、FilePutObject 関数は、オブジェクトの VarType(8) を示す 2 バイトの記述子を書き込んでから、文字列の長さを示す 2 バイトの記述子を書き込み、その後、文字列データを書き込みます。FileOpen 関数のパラメータ RecordLength で指定するレコード長には、文字列の実際の長さより 4 バイト以上大きい値を指定する必要があります。記述子なしで文字列を書き込む場合は、パラメータ StringIsFixedLength に True を渡します。この場合は、正しい長さの文字列を読み込む必要があります。

  • 配列型の変数を使う場合は、配列のサイズと次元を表す記述子を書き込むかどうかを選択できます。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

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

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

必要条件

名前空間 : Microsoft.VisualBasic

モジュール : FileSystem

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

参照

参照

FileGet 関数

FileOpen 関数

Seek 関数

FilePut 関数

My.Computer.FileSystem オブジェクト

その他の技術情報

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