こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

バイナリーファイルの追記

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

投稿日時 - 2004-11-17 09:25:56

QNo.1088009

すぐに回答ほしいです

質問者が選んだベストアンサー

Randomファイルはレコード単位で扱うべきです。

Open File For Random As #1 Len = len(構造体)
レコード数 = (LOF(1) \ len(構造体)) + 1
Get #1, レコード番号, 構造体
Put #1, レコード番号, 構造体
Close #1

投稿日時 - 2004-11-17 11:29:32

お礼

todo36さん

ありがとうございました。
大変勉強になりました。

投稿日時 - 2004-11-17 15:24:38

ANo.2

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

#1です。
GETしているのであればシーク位置が移動するため再度SEEKする必要があると思います。
しかし、#2さんの言われるようにRandomでレコード単位でされたほうがいいですよ!

投稿日時 - 2004-11-17 11:36:48

お礼

kachimiさん

ありがとうございました。
また見かけたら宜しくお願い致します。

投稿日時 - 2004-11-17 15:25:44

ANo.1

出来るような気がするのですが・・・
どのように出来ないのか、補足願います。

投稿日時 - 2004-11-17 10:18:36

補足

失礼致しました。補足致します。

一度以前のファイルの最後のレコードの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

投稿日時 - 2004-11-17 11:16:04

あなたにオススメの質問