« ショートカットの相対パス | トップページ | テキストファイルを使って連番を生成する。 »

2008年2月 1日 (金)

FileSystemObjectでバイナリを読み書きする。

バイナリは、FileSystemObjectでなく、ADODB.Streamを使うのが普通ですが。。。

ANSI(シフトJIS)でも、それなりに読み書きできることがあります。
シフトJISの中のANSIコードの範囲で、コード=Asc(文字)、文字=Chr(コード)。

また、Unicodeなら、若干の限界がありますが、かなり読み書きできます。
2バイト単位の読み書き。先頭のバイトオーダマーク(0xFEFF)、末尾の端数バイト。
バイトオーダによって、0xHHhh がLittle EndianではhhHH、Big EndianではHHhhの順。
HH=AscW(文字) \ 256
hh=AscW(文字) Mod 256

また、スクリプトでは、ADODB.Streamならバイナリおk、とは行きません。
スクリプトには、バイト型やバイト配列がありません。:-(
読むときは、バイト配列をバイト文字列として、MidB()などの~B()を使います。
書くときは、Type=adTypeText、Charset="unicode"で、アンパック形式(0x00hh)のUnicode文字=ChrW(&Hhh)を書き込んで、Type=adTypeBinaryに変えて、Stream内でパックします。
ひとつのStreamでRead/Writeで詰めることもできますが、ふたつのStreamでCopyToしたほうが簡単です。

« ショートカットの相対パス | トップページ | テキストファイルを使って連番を生成する。 »