トップ  >  サンプルソース  >  バイナリファイル比較(C#/VB.NET)

バイナリファイル比較(C#/VB.NET)

2010年01月13日

バイナリファイルを比較するサンプル(ソース/コード)です。ファイルサイズが異なればすぐ不一致判定します。また、1バイトずつ比較して不一致バイトを見つけた時点で比較を終了します。全てのバイトデータが一致した時のみ一致と判定します。

テキスト比較のサンプルは テキストファイル比較(C#/VB.NET) です。
ファイル比較関係のツールやサンプルはこちら「ファイル比較関係」です。

' --------------------------------------------------------
' バイナリファイルを比較するサンプル(VB.NET/VS2005)
Private Sub Button1_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) _
    Handles Button1.Click

    Dim blnFit As Boolean = BinComp( _
        "D:\Temp\a.dat", "D:\Temp\b.dat")
    If blnFit Then
        MessageBox.Show("一致!!")
    Else
        MessageBox.Show("不一致!!")
    End If
End Sub

' バイナリ比較(一致の時はTRUEで返す)
Private Function BinComp( _
    ByVal f1 As String, ByVal f2 As String)
    Dim fi1 As New System.IO.FileInfo(f1)
    Dim fi2 As New System.IO.FileInfo(f2)

    ' ファイルサイズの比較
    If fi1.Length <> fi2.Length Then Return False

    Dim sr1 As System.IO.Stream = Nothing
    Dim sr2 As System.IO.Stream = Nothing
    Try
        ' バイナリファイルの読込
        sr1 = System.IO.File.Open(f1, _
            System.IO.FileMode.Open, _
            System.IO.FileAccess.Read)
        sr2 = System.IO.File.Open(f2, _
            System.IO.FileMode.Open, _
            System.IO.FileAccess.Read)

        ' バイナリファイルの1バイト比較
        Dim b1 As Integer = -1
        Dim b2 As Integer = -1
        Do
            b1 = sr1.ReadByte()
            b2 = sr2.ReadByte()
            If b1 <> b2 Then Return False
            If b1 = -1 Then Exit Do
        Loop While (b1 = b2)

    Catch ex As Exception
        Throw ex
    Finally
        ' バイナリファイルクローズ
        If sr1 Is Nothing = False Then sr1.Close()
        If sr2 Is Nothing = False Then sr2.Close()
    End Try
    Return True
End Function
' --------------------------------------------------------
// -------------------------------------------------------
// バイナリファイルを比較するサンプル(C#.NET/VS2005)
private void button1_Click(object sender, EventArgs e)
{
    Boolean blnFit = BinComp(
        @"D:\Temp\a.dat", @"D:\Temp\b.dat");
    if( blnFit )
    {
        MessageBox.Show("一致!!");
    }else{
        MessageBox.Show("不一致!!");
    }
}

// バイナリ比較(一致の時はTRUEで返す)
private Boolean BinComp(String f1, String f2)
{
    System.IO.FileInfo fi1 = new System.IO.FileInfo(f1);
    System.IO.FileInfo fi2 = new System.IO.FileInfo(f2);

    // ファイルサイズの比較
    if (fi1.Length != fi2.Length) return false;

    System.IO.Stream sr1 = null;
    System.IO.Stream sr2 = null;
    try
    {
        // バイナリファイルの読込
        sr1 = System.IO.File.Open(f1,
             System.IO.FileMode.Open,
             System.IO.FileAccess.Read);
        sr2 = System.IO.File.Open(f2,
             System.IO.FileMode.Open,
             System.IO.FileAccess.Read);

        // バイナリファイルの1バイト比較
        int b1 = -1;
        int b2 = -1;
        do
        {
            b1 = sr1.ReadByte();
            b2 = sr2.ReadByte();
            if (b1 != b2) return false;
            if (b1 == -1) break;
        } while (b1 == b2);

    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        // バイナリファイルクローズ
        if (sr1 != null) sr1.Close();
        if (sr2 != null) sr2.Close();
    }
    return true;
}
// -------------------------------------------------------
スポンサーサイト

DataGridView 行追加/行削除(C#/VB.NET) | トップページへ戻る | ToStringの書式(C#/VB.NET)

このページのトップに戻る

コメント

名前
題名
メールアドレス
WEBサイト
 
コメント
パスワード
  管理者にだけ表示を許可する

このページのトップに戻る

トラックバック

このページのトップに戻る