動的配列をバイナリーで書き込むには?

解決


no-fly-bird  2004-02-05 11:10:11  No: 81839  IP: [192.*.*.*]

VB6.0を使用してる初心者です。
動的配列をPutでバイナリ書き込みすると、最初の10バイトに余計なものがついてしまいます。(おそらく可変長のためその長さを示していると思う。)
データ部分のみ、出力したいのですが良い方法がありますか?
構造体の中で動的配列を定義しているので、できればループ処理で書き込みは避けたいです。

編集    削除
魔界の仮面弁士  2004-02-05 19:16:24  No: 81840  IP: [192.*.*.*]

> 最初の10バイトに余計なものがついてしまいます。

ランダムアクセスモードではなく、バイナリアクセスモードを使ってください。
例えば下記のコードでは、10バイトの識別子は挿入されないと思います。

Option Explicit

Private Type Test
    B() As Byte
End Type

Private Sub Form_Load()
    Dim X As Test

    ReDim X.B(4)
    X.B(0) = &HAA
    X.B(1) = &HBB
    X.B(2) = &HCC
    X.B(3) = &HDD
    X.B(4) = &HEE

    Dim FName As String
    FName = "C:\A.DAT"

    On Error Resume Next
    Kill FName
    On Error GoTo 0

    Dim FNo As Integer
    FNo = FreeFile()
    Open FName For Binary As #FNo

    Put #FNo, , X.B

    Close #FNo
End Sub

ただし、
  『  Put #FNo, , X.B  』
の行を、
  『  Put #FNo, , X  』
にした場合は、先頭に識別子が挿入される事になります。

先頭に識別子が挿入される条件については、ヘルプの「Put ステートメント」の項を参照してみてください。


> おそらく可変長のためその長さを示していると思う。
先頭2バイトは次元数を表します。(&H0001 になっていると思います)
そして、その次の4バイトが 1次元目の要素数(LBound値とUBound値の差)を表し、続く4バイトが、1次元目の下限値(LBound値)を表します。

編集    削除
no-fly-bird  2004-02-06 06:16:31  No: 81841  IP: [192.*.*.*]

解決しました。ありがとうございました。

編集    削除