Comparer rapidement 2 fichiers avec un indice de tolérance

0/5 (4 avis)

Snippet vu 4 951 fois - Téléchargée 34 fois

Contenu du snippet

Cette source est particulirement utile pour comparer deux images facilement, en choissant le pourcentage de difference.
Mais autrement, vous pouvez comparer tout les autre types de fichier.
Attention la tolérance est en pourcentage.

Pour qu'il n'y ai aucun pourcentage de tolérance : Tolérance = 0

Ensuite, l'executable créé en natif, pour deux fois le même fichier de 20,9 Mo il m'a fallu 59 secondes pour effectuer le test de comparaison.

Source / Exemple :


Public Function Fichiers_Egaux(Path1 As String, Path2 As String, Tolerance As Integer) As Boolean
    Dim Max As Long
    Dim File1() As Byte
    Dim File2() As Byte
    Dim verif As Long

    Open Path1 For Binary As #2
        ReDim File1(LOF(2))
        Get #2, , File1()
    Close #2

    Open Path2 For Binary As #2
        ReDim File2(LOF(2))
        Get #2, , File2()
    Close #2
    
    Max = UBound(File1)

    If UBound(File1) = UBound(File2) Then
        For i = 0 To Max
            DoEvents
            If File1(i) <> File2(i) Then verif = verif + 1
        Next i
    Else
        MsgBox ("Les fichiers n'ont pas la même taille, ils ne sont donc pas identique.")
    End If

    If (verif / UBound(File1) * 100) < Tolerance Then Fichiers_Egaux = True Else Fichiers_Egaux = False
End Function

Conclusion :


Je connais pas de bug, mais si vous en voyez dites le moi.

A voir également

Ajouter un commentaire Commentaires
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
21 févr. 2005 à 10:59
Oui, je pourais faire MD5 ou autre mais pas de tolérance, et pour ce qui est de la rapidité, je pourrais aussi utiliser les api pour récupéré et comparer les fichiers, je verrais.

Merci, pour vos commentaires.
cbnet Messages postés 176 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 7 mars 2005
21 févr. 2005 à 07:04
En utilisant une méthode de hashage comme le MD5, tu peux comparer 2 fichiers de grandes tailles en quelques secondes seulement... cependant avec cette méthode la tolérance est de 0.

Après pour ton code, ce n'est qu'une supposition mais je pense que la comparaison pourait être plus rapide si tu utilisais un string d'une taille limité (32 ou 64 caractères par ex ?) plutôt qu'un type byte. Voilà, c'est pour tenter d'améliorer tout ça. Mais sinon c'est bien. Bonne continuation.
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
19 févr. 2005 à 14:07
C'est une recherche linéaire, donc logiquement ça fait 59 / 20,9 si on néglige l'initialisation, du moins sur le pc de l'auteur...
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
19 févr. 2005 à 02:07
Pour info, ça prend environ combien de temps un fichier d'un Mo (ou plutot 2 ;) ?
C'est juste histoire d'avoir un ordre de grandeur

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.