次の方法で共有


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、コンパイル時に、などLongIntegerShort、別のFileGet型ではなく型Objectが返される場合にあいまいさを回避するために、 の代わりに使用されます。

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

FileGetObjectは および Binary モードでのみRandom有効です。

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

ファイル内の最初のレコードまたはバイトは 1 番目の位置にあり、2 番目のレコードまたはバイトは 2 番目の位置にあります。 を省略RecordNumberFileGetObjectした場合は、最後または関数の後 (または最後FileGetObjectの関数が指す) の後にレコードまたはFilePutObjectバイトをSeek読み取ります。

ランダム モード

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

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

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

  • 読み込まれる変数が配列の場合、関数の パラメーターでRecordLengthFileOpen指定されるレコード長は、配列データと配列記述子の書き込みに必要なすべてのバイトの合計以上である必要があります。 記述子は、配列のランク、サイズ、および各ランクの下限を指定します。 長さは、2 + 8 * NumberOfDimensions の 2 + 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 、次の例外があります。

  • RecordLength関数の FileOpen 句は効果がありません。 FileGetObject は、ディスクからすべての変数を連続して読み取ります。つまり、レコード間にパディングはありません。

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

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

重要

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

適用対象

こちらもご覧ください