FileSystem.FileGetObject(Int32, Object, Int64) メソッド

定義

開いているディスク ファイルから変数にデータを読み取ります。 My機能を使用すると、FileGetObjectよりもファイル 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)

注釈

FileGetObject関数は、IntegerLongShortなど、別の型ではなく型Objectが返された場合にコンパイル時にあいまいさを回避するために、FileGetの代わりに使用されます。

Variant型を書き出す場合は、FileGetObjectが必要です。 不明な場合は、2 番目のパラメーターにオブジェクトを使用している場合は、常に FilePutObjectFileGetObjectを使用することをお勧めします。

FileGetObject は、 Random モードと Binary モードでのみ有効です。

FileGetObjectで読み取られたデータは、通常、FilePutObjectで書き込まれます。

ファイルの最初のレコードまたはバイトは位置 1 になり、2 番目のレコードまたはバイトは位置 2 になります。これ以降も同様です。 RecordNumberを省略FileGetObject場合は、最後のFileGetObjectまたはFilePutObject関数 (または最後のSeek関数が指す) の後のレコードまたはバイトを読み取ります。

ランダム モード

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

  • 読み取るデータの長さが、FileOpen関数のRecordLength句で指定された長さより小さい場合、FileGetObjectはレコード長境界で後続のレコードを読み取ります。 レコードの末尾とその次のレコードの先頭までの空間には、ファイル バッファーの既存の内容が埋め込まれます。 埋め込みデータの量を正確に決定できないため、レコードの長さを読み取るデータの長さと一致させるのが適切です。

  • 読み込まれる変数が文字列の場合、既定では、 FileGetObject は文字列の長さを含む 2 バイトの記述子を読み取り、変数に入るデータを読み取ります。 したがって、FileOpen関数のRecordLength句で指定されるレコード長は、文字列の実際の長さよりも少なくとも 2 バイト大きい必要があります。 Visual Basic 6.0 以前のバージョンでは固定長文字列がサポートされており、ファイルへの読み取り時に長さ記述子は書き込まれません。 記述子を使用せずに文字列を読み取る場合は、 TrueStringIsFixedLength パラメーターに渡し、読み取る文字列は正しい長さにする必要があります。

  • 読み込む変数が配列の場合、FileOpen関数のRecordLength パラメーターで指定されるレコード長は、配列データと配列記述子の書き込みに必要なすべてのバイトの合計以上である必要があります。 記述子は、配列のランク、サイズ、および各ランクの下限を指定します。 その長さは、2 + 8 * NumberOfDimensions: 2 + 8 次元数の 8 倍に等しくなります。

    たとえば、次の配列宣言では、配列がディスクに書き込まれるときに 218 バイトが必要です。

    Dim MyArray(4, 9) As Integer
    

    218 バイトは、記述子の場合は 18 バイト (2 + 8 * 2)、データの場合は 100 バイト (5 * 10 * 4) として分散されます。

  • FileGetObject は、要素間に埋め込みがない点を除き、それぞれが個別に読み取られているかのように構造体の要素を読み取ります。 ディスク上では、ユーザー定義型 ( FilePutObject で書き込まれた) の動的配列には、長さが 2 + 8 倍の次元数の 2 + 8 * NumberOfDimensions の記述子がプレフィックスとして付けられます。 FileOpen関数のRecordLength句で指定されるレコード長は、配列とその記述子を含め、個々の要素を読み取るために必要なすべてのバイトの合計以上である必要があります。 VBFixedStringAttribute クラスは、ディスクに書き込まれるときに文字列のサイズを示すために、構造体の文字列フィールドに適用できます。

バイナリ モード

Binary モードで開かれたファイルの場合、すべてのRandomルールが適用されます。ただし、次の例外があります。

  • FileOpen関数のRecordLength句は無効です。 FileGetObject は、ディスクからすべての変数を連続して読み取ります。つまり、レコード間に埋め込みは行われません。

  • 構造体内の配列以外の配列の場合、 FileGetObject はデータのみを読み取ります。 記述子は読み取られません。

FileGetObject は、2 バイト長記述子を予期せずに、構造体の要素ではない可変長文字列を読み取ります。 読み取られるバイト数は、文字列に既に含まれている文字の数と等しいものです。

Important

ファイルから読み取る場合は、ファイル名拡張子に基づいてファイルの内容を決定しないでください。 たとえば、Form1.vb という名前のファイルは、Visual Basicソース ファイルではない可能性があります。

適用対象

こちらもご覧ください