• ベストアンサー

バイナリファイルの比較について困っております

FDにあるファイルとHDにあるファイルをバイナリで開き 1バイトずつ比較を実施したいと考えております。 バイナリでファイルオープンまでは何とか出来たのですが、 ファイルを読み込み、1バイトずつ比較する方法が判りません。 どなたか御教授御願い致します。

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

普通にやるのは以下の方法です。 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

te0000
質問者

お礼

ありがとうございます。 御教え頂いたプログラムを組んだところ 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 不具合有りますでしょうか? 御手数をお掛けし申し訳ございませんが、御教授御願い致します。

その他の回答 (3)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

ゴメンなさいです。下記のように記述すべきところでした。 Get #1, , Buffer ⇒ Get #1, , バッファ

te0000
質問者

お礼

こちらこそ申し訳御座いません。 わざわざ修正までして頂きありがとうございます。

回答No.3

>Get #1, , Buffer '==バイナリデータの読み込み Bufferて何?。どこから出てきたのですか? プログラムの先頭に Option Explicit を追加したほうが良いですよ。

te0000
質問者

お礼

nda23様からアドバイス頂いたソースサンプルに Bufferと記述されていた為、VBのコマンドと思いそのまま 使用しておりました。 初心者の為調べてみてるのですが、判らない事が多く 1つ1つのアドバイスが参考になります。 ありがとうございます。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

VBは.NET系とVB6(VBA)系では全く異質のものなので、ターゲットと バージョンを記載してください。 ところで、DOSにFCコマンド(File Compare = ファイル比較)と いうのがあるのをご存知ですか?シェルでこれを実行し、標準出力を フックして、さも自分でやったように振る舞うのも一法かと・・・

te0000
質問者

お礼

申し訳ございません。 VB6.0系を使用して作成しております。 元のソースがVB6.0系で作成されており、追加でファイル比較をしたいと考えております。 宜しくお願い致します。

関連するQ&A