- ベストアンサー
バイナリファイルの比較について困っております
FDにあるファイルとHDにあるファイルをバイナリで開き 1バイトずつ比較を実施したいと考えております。 バイナリでファイルオープンまでは何とか出来たのですが、 ファイルを読み込み、1バイトずつ比較する方法が判りません。 どなたか御教授御願い致します。
- te0000
- お礼率80% (38/47)
- Visual Basic
- 回答数4
- ありがとう数4
- みんなの回答 (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系で作成されており、追加でファイル比較をしたいと考えております。 宜しくお願い致します。
関連するQ&A
- ファイル比較について
VB6でHD内にあるデータとFD内にあるデータを 順番に比較したいと思っております。ファイル数は26個程で 形式はバイナリ形式のファイルです。 変換して出来たファイルをHDとFDにコピーしているのですが FDにコピーしたファイルが書き込み不良等でたまにHD内のファイルと 違っています。 今はテキストエディターのファイル比較を手動で行なっておりますが 変換時に自動で比較できればと考えております。 どなたか御教授御願い致します。
- ベストアンサー
- Visual Basic
- 600kbyteくらいのバイナリファイルをバイナリ比較してくれるソフトはありませんか?
600kbyte程度のバイナリファイルで、そのファイルにデータを書き込むと、どのようにデータを並べているのか調べたく、データ追加を行うたびに追加前のデータファイルとをバイナリ比較してみたいと思っています。そのような比較用のフリーソフトをご存じの方いらっしゃいませんでしょうか。 以前から、”DF”という比較表示ソフトを使っていて、試してみたのですが、ファイルが大きすぎるらしく途中でフリーズしてしまいました。 ご存じの方いらっしゃいましたらご教授願います。
- ベストアンサー
- フリーウェア・フリーソフト
- バイナリファイルの比較
バイナリファイルの比較をして差異があるかDOSコマンドで調べたいのですがどうすればよいでしょうか?ちなみにFCコマンドだとレングスチェックしかされないのでだめでした。
- ベストアンサー
- その他(プログラミング・開発)
- バイナリ
VB6.0を使っています。 全てのファイル(Word、エクセル、Exe、Txtなどなんでも)はバイナリファイルとして扱えるのですか? バイナリファイルとして読み込んで、別名で保存して、 また、元の形式に戻すにはどのようにしたらよいのでしょうか? バイナリモードでOpenして 1バイトずつ、 バイナリモードで書き込めばいいのでしょうか? また、読む場合は、 バイナリモードで開いて、 1文字ずつ 何モードで書き込めばいいのでしょう? バイナリでいいのですか? ファイルの形式などよくわかっていません。。。。
- ベストアンサー
- Visual Basic
- バイナリエディタで同じファイルでも
バイナリエディタで開いて比較するとまったく同じだと言われる2つのファイルがあります。 しかし、この2つのファイルの、片方は対応のソフトで開けるのですが、もう片方はエラーとなってしまいます。 この違いはどんなところにあるのでしょうか?? バイナリエディタで同じと言われたら、それはまったく同じファイルではないかと思っていたのですが、違うのでしょうか。 あまり詳しくはわからないのですが、思い当たる節があればご教授頂きたいと思います。 よろしくお願いします。
- 締切済み
- その他([技術者向] コンピューター)
- memcmp バイナリデータの比較方法
------------------------------------ Visual Studio 2008 pro VC++ ------------------------------------ 基本的な質問で申し訳ないのですが、memcmp()などでバイナリデータとの比較方法について教えてください。 例えばバイナリファイルを開き、その先頭から10バイト分が特定のバイトコードであるかを調べ用とした場合、fread()で10バイト分読み込んだバッファーをmemcmpで比較すればよろしいのでしょうか? また、その際に比較対象のバイトコードはどのように指定したらよいのでしょうか? --------------------------------- 例:比較対象のバイトコードが0xFFFFFFFFFFFFFFFFFFFFの場合 fread( szBuffer, 1, 10, fp ); memcmp( szBuffer, ???, 10 ); ---------------------------------
- ベストアンサー
- C・C++・C#
- サイズの異なるバイナリファイルの比較をしたい
詳しい方が多そうなのでこちらのカテで質問させて下さい。 ●サイズの異なるバイナリファイルの相違を調査できるソフトを探しています。 環境はWindows XPです。 ●状況説明 ある動画サイト上の一つの動画を異なるソフトを使いダウンロードしました。 DLする際に、 一方のソフトは無変換と指定しました。(Craving Explorer) もう一方のソフトには設定項目がありませんでした。(Real Downloader) その結果、ファイルサイズがほとんど同じの2つの.flv動画ファイルがDLできました。 2つのファイルのサイズは次の通り。 20,163,319 バイト(Craving Explorer) 20,164,410 バイト(Real Downloader) ファイルサイズがほとんど一緒なので、おそらく動画データ本体は全く一緒で、ヘッダ情報だけが異なっているのではと推測しているのですが、自分の推測が正しいのかどうかを検証するのが目的です。 サイズが異るバイナリファイルの比較が出来るソフトがあれば教えて下さい。 よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- vb6で作成したexeのバイナリ比較
こんにちは。 以下の点につきまして、調査が難航しておりますので、 有識者の方がいらっしゃいましたら、是非教えて頂きたく、宜しくお願い致します。 ★調査したい事 vb6で過去に作成済のexeファイルは、現在手元にあるソースからコンパイルして作成されたものかどうか、現在調査しています。 そこで、調査方法としまして、以下の方法で調査を実施しています。 ★調査方法 1.現在手元にあるソースをコンパイルして、比較先のexeファイルを作成する。 2.過去に作成済のexeファイルと、比較先のexeファイルのバイナリ比較を実施する。 ⇒2.1 スタートメニューからVisual Stadio 2008 コマンドプロンプトを起動する。 2.2 DUMPBIN /RAWDATA 過去に作成済の.EXE > first.txt 2.3 DUMPBIN /RAWDATA 比較先の.EXE > second.txt 2.4 FC /B first.txt second.txt (参考にしたマイクロソフトサポート情報:http://support.microsoft.com/kb/164151/ja) この方法で比較したところ、非常に多くの差異が出ました。(12万行中、約6万行の差異) この差異は正しいのかどうか、試しにコンパイル日付のみが違うexeファイル同士を比較したのですが、 この時も同様に、非常に多くの差異が出ました。(12万行中、約6万行の差異) 以下、ご質問なのですが、 (1)私が実施しているバイナリ比較方法は間違っているのでしょうか? (2)上記の「★調査したい事」を達成する為、別の良い手段がありましたら、是非教えて下さい。 宜しくお願い致します。
- ベストアンサー
- その他([技術者向] コンピューター)
- C++のバイナリファイル読み込み
C++を勉強しています。 例えばバイナリファイルがあって、例えば5バイトおきに10バイトずつ読み込むという場合についてどうすればいいか考えています。(5~15,20~30,35~45のような) 調べてみるとseekgなどが使える??と思ったんですが,プログラミング得意じゃないんでいまいち分かりませんでした。 質問内容からしてプログラムを何も分かってないと思われるかと思いますが,ご教授お願いします
- ベストアンサー
- C・C++・C#
お礼
ありがとうございます。 御教え頂いたプログラムを組んだところ 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 不具合有りますでしょうか? 御手数をお掛けし申し訳ございませんが、御教授御願い致します。