SAVOIR SI DEUX FICHIERS SONT IDENTIQUES

Contenu du snippet

''' <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


Compatibilité : VB 2005, VB 2008

Disponible dans d'autres langages :

A voir également