tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
バイナリファイルの比較(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



 [スレッド一覧へ] [親スレッドへ]