Comparer rapidement 2 fichiers avec un indice de tolérance

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 839 fois - Téléchargée 33 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
Messages postés
589
Date d'inscription
lundi 25 août 2003
Statut
Membre
Dernière intervention
18 juillet 2010
1
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.
Messages postés
176
Date d'inscription
vendredi 29 octobre 2004
Statut
Membre
Dernière intervention
7 mars 2005

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.
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010

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...
Messages postés
2167
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009
1
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.