- ベストアンサー
バイナリーファイルの追記
VB初心者です。 3レコードからなる90バイトのバイナリーファイルの 最後のレコードだけを上書きしたいのですが、うまく いきません。どう書けば良いのでしょうか? 宜しくお願い致します。 '------------------------------------------------ Public Type REC_INFORMATION AA As Long BB As Single CC As Single DD As Single EE As Single FF As Single GG As Single HH As Integer End Type Public RecInfo As REC_INFORMATION '------------------------------------------------------------- Dim ByteCNT as Long RecInfo.AA = CLng("123") RecInfo.BB = CSng("123") RecInfo.CC = CSng("123") RecInfo.DD = CSng("123") RecInfo.EE = CSng("123") RecInfo.FF = CSng("123") RecInfo.GG = CSng("1") RecInfo.HH = CInt("1") Open "c:\TEST.bin" For Binary As #1 ByteCNT = LOF(1) Seek #1, (ByteCNT - 29) Put #1, , RecInfo Close #1
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Randomファイルはレコード単位で扱うべきです。 Open File For Random As #1 Len = len(構造体) レコード数 = (LOF(1) \ len(構造体)) + 1 Get #1, レコード番号, 構造体 Put #1, レコード番号, 構造体 Close #1
その他の回答 (2)
- kachimi
- ベストアンサー率40% (12/30)
#1です。 GETしているのであればシーク位置が移動するため再度SEEKする必要があると思います。 しかし、#2さんの言われるようにRandomでレコード単位でされたほうがいいですよ!
お礼
kachimiさん ありがとうございました。 また見かけたら宜しくお願い致します。
- kachimi
- ベストアンサー率40% (12/30)
出来るような気がするのですが・・・ どのように出来ないのか、補足願います。
補足
失礼致しました。補足致します。 一度以前のファイルの最後のレコードのRecInfo.AAを取得し、 今回取得した123と同一であれば上書き,違うのもであればファイルの最後に新しく今回のレコードと追加するという仕様です。 そのコーディングの途中段階であり、"GET"している部分が抜けていました。この先がうまくできないので困っています。 宜しくご指導願います。 '-------------------------------- Open "c:\TEST.bin" For Binary As #1 ByteCNT = LOF(1) Seek #1, (ByteCNT - 29) Get #1, , RecInfo.AA '補足部分 Put #1, , RecInfo Close #1
お礼
todo36さん ありがとうございました。 大変勉強になりました。