掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
バイナリのBlockWrite方法 (ID:47245)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
通りすがりさん ありがとうございました。 大変参考になりました。 動的配列を使っていると言う意識が希薄でした。 BlockWriteの第2パラメータはbufではなくbuf[0]で解決です。 また、test2のbufがarray of Byteになってますけどarray of Wordでした。 実は、元々TFileStreamで始めたのですが、うまく行かず、色々試した中で上記をアップさせて頂いた次第です。 TFileStreamでも、buf[0]とする事で取り合えずうまく行きました。 ただ、納得が行かない点がありました。 動的配列は buf : Array of Word; としました。 wid := getTAG( $256 ); hei := getTAG( $257 ); dpx := getTAG( $258 ); dpy := getTAG( $259 ); buf[ 0 ] := 0; buf[ 1 ] := wid; buf[ 2 ] := hei; buf[ 3 ] := 0; buf[ 4 ] := dpx; buf[ 5 ] := dpy; buf[ 6 ] := wid; buf[ 7 ] := hei; buf[ 8 ] := 0; buf[ 9 ] := 0; SetLength( buf, 10 ); fs := TFileStream.Create( filename, fmCreate ); cnt := fs.Write( buf[ 0 ], 20 ); fs.Free(); で、全てのbufデータがファイルに期待通りに書き出されます。 疑問は、fs.Write( buf[ 0 ], 20 )のところです。 bufはwordの配列として定義したので、fs.Write( buf[ 0 ], 10 )で良いはずと思うのですが、これではbufの半分までしか書き出されません。 最終的にBlockWriteでうまくいった時は、 buf : Array of Byte の時は、 BlockWrite( bf, buf[ 0 ], 20 ) buf : Array of Word; の時は、 BlockWrite( bf, buf[ 0 ], 10 ) で、全てのbufデータがファイルに下記出されています。 考えられる相違は、TFileStreamで書き出しの単位の指定の方法が分かっていません。 BlockWriteの時は、ReWrite( bf, "書き出し単位" )と明示的に指定されました。 お蔭様でストリームで動作としてはOKとなりました。 ストリームでの書き出し単位いついてご教授頂ければ幸いです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.