tagCANDY CGI VBレスキュー(花ちゃん) - バイナリファイルの比較(VB6.0) - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
バイナリファイルの比較(VB6.0)
元に戻る スレッド一覧へ 記事閲覧
このページ内の検索ができます。(AND 検索や OR 検索のような複数のキーワードによる検索はできません。)

バイナリファイルの比較(VB6.0) [No.122の個別表示]
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
日時: 2007/08/02 14:17
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[ファイル][ファイル入出力][]                                        *
* キーワード:バイナリ,Binary,,,,                                              *
***********************************************************************************

元質問:バイナリファイルの比較 - つぼちゃん  2006/10/05-23:03 No.7440

バイナリファイルの比較を行いたいのですが、どのようにして行えばよいでしょうか。
ちなみに実際に比較したいのはjpgファイルで、同じか違うかだけ比較できればよいです。

-----------------------------------------------------------------------------------
Re: バイナリファイルの比較 - 魔界の仮面弁士  2006/10/05-23:25 No.7442
-----------------------------------------------------------------------------------

ハッシュ値を比較するとか。
http://www.hi-ho.ne.jp/babaq/basp21.html

  Const FromString As Integer = 0
  Const FromFile As Integer = 1

  Dim S(1) As String
  With CreateObject("BASP21")
    S(0) = .MD5("C:\001.JPG", FromFile)
    S(1) = .MD5("C:\002.JPG", FromFile)
  End With

  If S(0) = S(1) Then
    MsgBox "同じファイルです。"
  Else
    MsgBox "異なるファイルです。"
  End If
メンテ

Page: 1 |

バイナリファイルの比較(VB6.0)_1  (No.1の個別表示) [スレッド一覧へ]
日時: 2011/04/05 10:46
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[ファイル][ファイル入出力][]                                        *
* キーワード:バイナリ,Binary,,,,                                              *
***********************************************************************************
-----------------------------------------------------------------------------------
Re: バイナリファイルの比較 - Starfish  2006/10/06-00:18 No.7443
-----------------------------------------------------------------------------------

 こんな感じでもOKです。ファイルを読む前に、ファイルサイズのチェックをしたほうが
まともでしょうが、適当に直して使ってください。


Dim bytBuf1() As Byte
Dim bytBuf2() As Byte

    Open "ホゲホゲ1.wav" For Binary As #1
    Open "ホゲホゲ2.wav" For Binary As #2
    bytBuf1 = InputB(LOF(1), #1)
    bytBuf2 = InputB(LOF(2), #2)
    Close #1, #2
    
    If CStr(bytBuf1) = CStr(bytBuf2) Then
        MsgBox "同じです。"
    Else
        MsgBox "違います。"
    End If
メンテ
バイナリファイルの比較(VB6.0)_2  (No.2の個別表示) [スレッド一覧へ]
日時: 2011/04/05 10:46
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[ファイル][ファイル入出力][]                                        *
* キーワード:バイナリ,Binary,,,,                                              *
***********************************************************************************
-----------------------------------------------------------------------------------
Re: バイナリファイルの比較 - も  2006/10/06-00:38 No.7444
-----------------------------------------------------------------------------------

ちょっと私も後で使うので、作ってみました(少しだけテスト完了)
テストとしては「DataBlockLenの整数倍にならないファイルの終端1バイトだけ変えたファイルをFalseとみなすか」というものしかやってません

Public Function CompareFileData(ByVal FilePath1 As String, ByVal FilePath2 As String) As Boolean
    'FilePath1とFilePath2の示すファイルのデータが等しければ真、等しくなければ偽
    Const DataBlockLen  As Long = 1024& * 10 '10KBのブロックデータとして扱う
    Dim ff1             As Integer
    Dim ff2             As Integer
    Dim FileLength      As Long
    Dim i               As Long
    Dim k               As Long
    Dim buf1()          As Byte
    Dim buf2()          As Byte
    ReDim buf1(1 To DataBlockLen), buf2(1 To DataBlockLen)
    
    'デフォルトでFalseを返す
    CompareFileData = False
    
    'ファイルの存在確認
    If Not (ExistFile(FilePath1) And ExistFile(FilePath2)) Then Exit Function
    
    'ファイル長の確認
    FileLength = FileLen(FilePath1)
    If Not (FileLength = FileLen(FilePath2)) Then Exit Function
    
    'ファイルデータの確認
    ff1 = FreeFile(): Open FilePath1 For Binary Access Read As ff1
    ff2 = FreeFile(): Open FilePath2 For Binary Access Read As ff2
        For i = 1 To FileLength Step DataBlockLen
            If FileLength - i + 1 < DataBlockLen Then
                'ファイルの橋を切り詰める ※不必要かも
                ReDim buf1(1 To FileLength - i + 1), buf2(1 To FileLength - i + 1)
            End If
            Get #ff1, i, buf1()
            Get #ff2, i, buf2()
            For k = LBound(buf1) To UBound(buf1)
                If Not (buf1(k) = buf2(k)) Then
                    '等しくない
                    Exit Function
                End If
            Next
        Next
    Close ff1, ff2
    
    'ファイルのデータは等しかった
    CompareFileData = True
    
End Function

Private Function ExistFile(ByVal FilePath As String) As Boolean
    On Error GoTo Error:
        ExistFile = Not (GetAttr(FilePath) And vbDirectory)
Error:
    'ファイルではない
End Function
メンテ

Page: 1 |

 投稿フォーム               スレッド一覧へ
題  名 スレッドをトップへソート
名  前
パスワード (記事メンテ時に使用)
投稿キー (投稿時 投稿キー を入力してください)
コメント

   クッキー保存   
スレッド一覧へ