VB.NET - Comparando Arquivos


E se você precisar comparar dois arquivos ? Qualquer tipo de arquivo : arquivos textos , binários , imagens , etc. ? Sabe como fazer isto em VB.NET ?  Não sabe ?  Bem , não sabia , vai ficar sabendo já , já ...

O código da função abaixo compara dois arquivos , de qualquer tipo , e retorna True se os arquivos forem idênticos e False se forem diferentes. Como é feita uma comparação de bytes podemos usar para qualquer arquivo.

Você deve também importar os seguintes namespaces :

Imports System.IO

Imports System.Security.Cryptography

 

Código da função ComparaArquivos.(Você pode inserir este código do formulário , em um módulo, em uma classe , conforme o seu interesse e sua necessidade)

 

Public Function ComparaArquivos(ByVal nomeCaminhoCompletoArquivo1 As String, ByVal nomeCaminhoCompletoArquivo2 As String) As Boolean

 

Dim objMD5 As New MD5CryptoServiceProvider()

Dim objEncoding As New System.Text.ASCIIEncoding()

Dim aArquivo1() As Byte, aArquivo2() As Byte

Dim strConteudo1, strConteudo2 As String

Dim objReader As StreamReader

Dim objFS As FileStream

Dim bResposta As Boolean

 

If Not File.Exists(nomeCaminhoCompletoArquivo1) Then Throw New Exception(nomeCaminhoCompletoArquivo1)

If Not File.Exists(nomeCaminhoCompletoArquivo2) Then Throw New Exception(nomeCaminhoCompletoArquivo1)

Try

   objFS = New FileStream(nomeCaminhoCompletoArquivo1, FileMode.Open)

   objReader = New StreamReader(objFS)

   aArquivo1 = objEncoding.GetBytes(objReader.ReadToEnd)

   strConteudo1 = objEncoding.GetString(objMD5.ComputeHash(aArquivo1))

   objReader.Close()

    objFS.Close()

 

   objFS = New FileStream(nomeCaminhoCompletoArquivo2, FileMode.Open)

   objReader = New StreamReader(objFS)

   aArquivo2 = objEncoding.GetBytes(objReader.ReadToEnd)

   strConteudo2 = objEncoding.GetString(objMD5.ComputeHash(aArquivo2))

 

   bResposta = strConteudo1 = strConteudo2

 

   objReader.Close()

   objFS.Close()

 

   aArquivo1 = Nothing

   aArquivo2 = Nothing

Catch ex As Exception

    Throw ex

End Try

 

Return bResposta

End Function

Para usar a função você pode criar um novo projeto no VS.NET do tipo Visual Basic modelo Windows Application e no formulário padrão inserir : duas caixas de texto (textbox1 e textbox2) , duas labels (label1 e label2)  e um botão de comando - button1.

No evento Click do botão de comando você põe o código que faz a chamada da função passando como parâmetros os nomes completos e caminhos dos arquivos informados nas caixas de textos. O código pode ser assim:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Try

   If (ComparaArquivos(TextBox1.Text, TextBox2.Text)) Then

       MsgBox("Os arquivos comparados são IGUAIS", MsgBoxStyle.Information, "Compara Arquivos")

   Else

       MsgBox("Os arquivos comparados são DIFERENTES", MsgBoxStyle.Information, "Compara Arquivos")

   End If

Catch ex As Exception

   MsgBox("Arquivo não localizado", MsgBoxStyle.Critical, "ARQUIVO NÃO EXISTE")

End Try

End Sub

Executando o projeto e comparando arquivos idênticos teremos:



Bom proveito e Até mais ...


José Carlos Macoratti