- ベストアンサー
バイナリファイルの比較について困っております
FDにあるファイルとHDにあるファイルをバイナリで開き 1バイトずつ比較を実施したいと考えております。 バイナリでファイルオープンまでは何とか出来たのですが、 ファイルを読み込み、1バイトずつ比較する方法が判りません。 どなたか御教授御願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
普通にやるのは以下の方法です。 ReDim バッファ(1) As Byte Dim ファイル長 As Long Dim データ長 As Long Dim I As Long Open "C:\~" For Binary As #1 ファイル長 = LOF(1) Do データ長 = ファイル長 - Loc(1) - 1 If データ長 < 0 Then Exit Do If データ長 > 127 Then データ長 = 127 ReDim バッファ(データ長) Get #1, , Buffer '==バイナリデータの読み込み For I = 0 To データ長 ★バッファ(I)=1バイトの処理 Next Loop Close #1 同じ方法で比較するファイルを開き、★の所で双方の1バイトずつを 比較すれば良いでしょう。 但し、容量の少ないほうが先にLoc()>=LOF()になるので、残った方を どうするかは考えてください。 この他に、ADODBのStreamオブジェクトを使う方法もあります。 こちらはVBScriptでも使用できます。 http://msdn.microsoft.com/ja-jp/library/cc364272.aspx
その他の回答 (3)
- nda23
- ベストアンサー率54% (777/1415)
ゴメンなさいです。下記のように記述すべきところでした。 Get #1, , Buffer ⇒ Get #1, , バッファ
お礼
こちらこそ申し訳御座いません。 わざわざ修正までして頂きありがとうございます。
- Hayashi_Trek
- ベストアンサー率44% (366/818)
>Get #1, , Buffer '==バイナリデータの読み込み Bufferて何?。どこから出てきたのですか? プログラムの先頭に Option Explicit を追加したほうが良いですよ。
お礼
nda23様からアドバイス頂いたソースサンプルに Bufferと記述されていた為、VBのコマンドと思いそのまま 使用しておりました。 初心者の為調べてみてるのですが、判らない事が多く 1つ1つのアドバイスが参考になります。 ありがとうございます。
- nda23
- ベストアンサー率54% (777/1415)
VBは.NET系とVB6(VBA)系では全く異質のものなので、ターゲットと バージョンを記載してください。 ところで、DOSにFCコマンド(File Compare = ファイル比較)と いうのがあるのをご存知ですか?シェルでこれを実行し、標準出力を フックして、さも自分でやったように振る舞うのも一法かと・・・
お礼
申し訳ございません。 VB6.0系を使用して作成しております。 元のソースがVB6.0系で作成されており、追加でファイル比較をしたいと考えております。 宜しくお願い致します。
お礼
ありがとうございます。 御教え頂いたプログラムを組んだところ Get #1, , Buffer '==バイナリデータの読み込み のところで Visual Basicでサポートされていないオートメーションが変数で 使用されています。となってしまいます。 記述したソース ReDim bfa(1) As Byte Dim fla As Long Dim dala As Long Dim I As Long Open "a:\test.DAT" For Binary Access Read As #1 fla = LOF(1) Do dala = fla - Loc(1) - 1 If dala < 0 Then Exit Do If dala > 127 Then dala = 127 ReDim bfa(dala) Get #1, , Buffer '=バイナリデータの読み込み For I = 0 To dala Next Loop Close #1 不具合有りますでしょうか? 御手数をお掛けし申し訳ございませんが、御教授御願い致します。