VB6でバイナリファイルを読み書きする時の注意点

まだ、Visual Basic 6.0の仕事をやってます。で、ちょっとハマったので書いておく。
バイナリのファイルを読むんだけども、1レコードの大きさは可変長なので、1バイトづつ読み取ってレコードバッファにくっつけていって組み立てるようなコードを書いた。で、ここでVB6でバイナリファイルを扱うなんて事をやったことがない人(俺)の勘違いが発覚。

Dim CharcterBuf As String * 1
Dim RecordBuf As String
Dim fh As Long
DIm BytePos As Long
fh = Freefile(0)
Open "hogefuga.bin" For Binary Access Read As #fh
BytePos = 1
Get #fh,BytePos,CharacterBuf
Do While Not (IsEndOfRecord(RecordBuf) Or EOF(fh))
    RecordBuf = RecordBuf & CharacterBuf
    BytePos = BytePos + 1
    Get #fh,BytePos,CharacterBuf
Loop

こう書くと、なんとデータによってはファイルに書かれている内容をそのまま読み取ることができない。勝手に違うコードに読み替えられる場合がある。「なんじゃこりゃあああああ」と絶叫してMSDN調べたら、文字列型はUnicodeの読み換えとかが発生するからバイナリはだめだよと。まあ、言われてみれば至極当然。で、書き換えると、こんな。

Dim CharcterBuf As Byte
Dim RecordBuf() As Byte
Dim fh As Long
DIm BytePos As Long
fh = Freefile(0)
Open "hogefuga.bin" For Binary Access Read As #fh
BytePos = 1
Get #fh,BytePos,CharacterBuf
Do While Not (IsEndOfRecord(RecordBuf) Or EOF(fh))
    ReDim Preserve RecordBuf(BytePos - 1)
    RecordBuf(BytePos - 1) = CharacterBuf
    BytePos = BytePos + 1
    Get #fh,BytePos,CharacterBuf
Loop

あと関連の関数やサブルーチンがStringでI/FしてたりするのをByte Arrayでやるように書き換える。Open文に「読み替えしない」みたいなオプションあれば、楽だったのにな。まあ、文字列型なんだからしょうがないか。
コードをちょっと修正。配列のインデックスはゼロ相対でした。