1

私がやりたいのは、 vb.net の2バイト配列を比較することだけです。私はこれらのコードを試しました:

If Byte.ReferenceEquals(bytearrayone, bytearraytwo) Then
  MsgBox("Yes", MsgBoxStyle.Information)
Else
  MsgBox("No", MsgBoxStyle.Critical)
End If

If Array.ReferenceEquals(bytearrayone, bytearraytwo) Then
  MsgBox("Yes", MsgBoxStyle.Information)
Else
  MsgBox("No", MsgBoxStyle.Critical)
End If

両方のバイト配列は同じで、一方の配列はリソースからファイルからバイトを取得し、もう一方はコンピューターからバイトを取得します。テスト目的で、両方の配列で同じファイルを使用しましたが、提供されたコードによると、No しか得られませんでした。どちらも同じ長さで、両方をループしました。両方とも同じポイントで同じバイトを持っています。では、何が問題なのですか?どのコードを使用すればよいですか? 私を助けてください。

4

2 に答える 2

7

SequenceEqual を使用する

    Dim foo() As Byte = {1, 2, 3, 4}
    Dim barT() As Byte = {1, 2, 3, 4}
    Dim barF() As Byte = {1, 2, 3, 5}

    Dim fooEqbarT As Boolean = foo.SequenceEqual(barT)
    Dim fooEqbarF As Boolean = foo.SequenceEqual(barF)

    Debug.WriteLine(fooEqbarT)
    Debug.WriteLine(fooEqbarF)

2 つの小さなファイルを比較する

    Dim path1 As String = "pathnameoffirstfile"
    Dim path2 As String = "pathnameofsecondfile"

    Dim foo() As Byte = IO.File.ReadAllBytes(path1)
    Dim bar() As Byte = IO.File.ReadAllBytes(path2)

    If foo.SequenceEqual(bar) Then
        'identical
    Else
        'different
    End If
于 2013-10-17T23:05:40.707 に答える
1

ファイルに関する情報 (変更日、名前、タイプなど) に関係なく、2 つのファイルを比較して内容が同じかどうかを確認することが目的の場合は、両方のファイルでハッシュを使用する必要があります。ここに私がしばらく使用したいくつかのコードがあります。これを行うには多くの方法があります。

''' <summary>
''' Method to get a unique string to idenify the contents of a file.
''' Works on any type of file but may be slow on files 1 GB or more and large files across the network.
''' </summary>
''' <param name="FI">System.IO.FileInfo for the file you want to process</param>
''' <returns>String around 50 characters long (exact length varies)</returns>
''' <remarks>A change in even 1 byte of the file will cause the string to vary 
''' drastically so you cannot use this to see how much it differs by.</remarks>
Public Shared Function GetContentHash(ByVal FI As System.IO.FileInfo) As String
    Dim SHA As New System.Security.Cryptography.SHA512Managed()
    Dim sBuilder As System.Text.StringBuilder
    Dim data As Byte()
    Dim i As Integer
    Using fs As New IO.FileStream(FI.FullName, IO.FileMode.Open)
        data = SHA.ComputeHash(fs)
        fs.Flush()
        fs.Close()
    End Using
    sBuilder = New System.Text.StringBuilder
    ' Loop through each byte of the hashed data 
    ' and format each one as a hexadecimal string.
    For i = 0 To data.Length - 1
        sBuilder.Append(data(i).ToString("x2"))
    Next i
    Return sBuilder.ToString()
End Function

これを各ファイルで実行して、ファイルを一意に識別する文字列を作成し、2 つの文字列を比較する必要があります。

于 2013-10-18T17:28:11.827 に答える