プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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 …
    • good
    • 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
不具合有りますでしょうか?
御手数をお掛けし申し訳ございませんが、御教授御願い致します。

お礼日時:2008/11/18 11:46

ゴメンなさいです。

下記のように記述すべきところでした。
Get #1, , Buffer ⇒ Get #1, , バッファ
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/19 16:52

>Get #1, , Buffer '==バイナリデータの読み込み


Bufferて何?。どこから出てきたのですか?

プログラムの先頭に
Option Explicit
を追加したほうが良いですよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/11/18 13:46

VBは.NET系とVB6(VBA)系では全く異質のものなので、ターゲットと


バージョンを記載してください。

ところで、DOSにFCコマンド(File Compare = ファイル比較)と
いうのがあるのをご存知ですか?シェルでこれを実行し、標準出力を
フックして、さも自分でやったように振る舞うのも一法かと・・・
    • good
    • 0
この回答へのお礼

申し訳ございません。
VB6.0系を使用して作成しております。

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

お礼日時:2008/11/18 09:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!