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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.