''' <summary>
''' Compare le contenu de deux fichiers
''' </summary>
''' <param name="FichierA">Chemin du premier fichier à comparer</param>
''' <param name="FichierB">Chemin du second fichier à comparer</param>
''' <returns>Vrai si identique, sinon faux</returns>
Public Function EstIdentique(ByVal FichierA As String, ByVal FichierB As String) As Boolean
Const BufferSize As Integer = 8192 ' 8Ko
Dim Retour As Boolean = True
' Verification existance fichiers
If (Not File.Exists(FichierA)) Then
Throw New IOException("Le fichier A n'existe pas !")
End If
If (Not File.Exists(FichierB)) Then
Throw New IOException("Le fichier B n'existe pas !")
End If
' Nos buffers de travail
Dim bufferA(BufferSize) As Byte
Dim bufferB(BufferSize) As Byte
' Ouverture du premier fichier A
Dim fA As New FileStream(FichierA, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize)
' Ouverture du second fichier B
Dim fB As New FileStream(FichierB, FileMode.Open, FileAccess.Read, FileShare.Read, BufferSize)
Dim LuA As Integer = bufferA.Length
Dim LuB As Integer = bufferB.Length
Try
Do
' Copie les 8 Ko suivant du flux dans les buffers
LuA = fA.Read(bufferA, 0, bufferA.Length)
LuB = fB.Read(bufferB, 0, bufferB.Length)
' On verifie que nous avons lu le meme nombre d'octet sur chaque flux
If (LuA = LuB) Then
' Comparaison octet à octet
For cpt As Integer = 0 To (bufferA.Length - 1)
If (bufferA(cpt) <> bufferB(cpt)) Then
Retour = False ' Les fichiers ne sont pas identiques
Exit Do ' On sort, plus besoin de continuer
End If
Next
Else
Retour = False ' Les fichiers ne sont pas identiques
Exit Do ' On sort, plus besoin de continuer
End If
' On continu si on peut encore en lire
Loop While (LuA > 0 And LuB > 0)
Catch ex As Exception
Throw New Exception("Erreur pendant l'execution de EstIdentique", ex)
Finally
' Ferme fichier A
If (Not fA Is Nothing) Then
fA.Close()
fA.Dispose()
End If
' Ferme fichier B
If (Not fB Is Nothing) Then
fB.Close()
fB.Dispose()
End If
End Try
Return Retour
End Function