- 日時: 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
|