IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Free Pascal Discussion :

Comparaison de deux fichiers quelconques [Free Pascal]


Sujet :

Free Pascal

  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 069
    Points : 15 448
    Points
    15 448
    Billets dans le blog
    9
    Par défaut Comparaison de deux fichiers quelconques
    Bonjour !

    J'aurais besoin d'une fonction qui permette de savoir si deux fichiers quelconques sont identiques (même avec des noms différents).

    Comment feriez-vous ça ?
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Bonjour,

    Plusieurs moyens :

    • le plus simpliste
      • Comparer les tailles
      • Si tailles égales
      • comparer byte à byte
    • plus élaboré
      • Comparer les tailles
      • Si tailles égales
      • calculer les hash (CRC ou md5 .... au choix)

    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 069
    Points : 15 448
    Points
    15 448
    Billets dans le blog
    9
    Par défaut
    Merci droggo pour la réponse.

    Donc à la limite on pourrait faire comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    type
      Octet = Byte;
      TFichier = file of Octet;
     
    function CompareFichiers(const aNomFichier1, aNomFichier2: string): Boolean;
    var
      fichier1, fichier2: TFichier;
      octet1, octet2: Octet;
    begin
      {$I-}
      AssignFile(fichier1, aNomFichier1);
      result := IOResult = 0;
      if not result then
        Exit;
     
      AssignFile(fichier2, aNomFichier2);
      result := IOResult = 0;
      if not result then
        Exit;
      {$I+}
     
      try
        Reset(fichier1);
        Reset(fichier2);
     
        while result and (not EOF(fichier1)) and (not EOF(fichier2)) do
        begin
          Read(fichier1, octet1);
          Read(fichier2, octet2);
          result := octet1 = octet2;
        end;
     
        if result then
          result :=  EOF(fichier1) and EOF(fichier2);
      finally
        CloseFile(fichier1);
        CloseFile(fichier2);
      end;
    end;
     
    begin
      WriteLn(CompareFichiers('image.jpg', 'image - Copie.jpg'));
    end.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Bonjour,
    Citation Envoyé par Roland Chastain Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     AssignFile(fichier1, aNomFichier1);
      result := IOResult = 0;
      if not result then
        Exit;
     
      AssignFile(fichier2, aNomFichier2);
      result := IOResult = 0;
      if not result then
        Exit;
    Je ne suis pas allé plus loin que ça, car si c'est ok pour fichier1 et que ça échoue pour fichier2, tu ne libères pas fichier1.

    D'accord, c'est une variable locale, mais c'est un principe de base de tout nettoyer, et de ne pas compter sur le système pour le faire.

    Et un peu plus loin, il faudrait aussi vérifier les reset

    ET contrôler les tailles des fichiers AVANT de commencer la comparaison octet à octet, qui est inutile si les tailles sont différentes.

    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 069
    Points : 15 448
    Points
    15 448
    Billets dans le blog
    9
    Par défaut
    Merci droggo.

    J'ai revu ma copie en essayant de prendre en compte tes remarques.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    type
      Octet = Byte;
      TFichier = file of Octet;
     
    function CompareFichiers(const aNomFichier1, aNomFichier2: string): Boolean;
    var
      fichier1, fichier2: TFichier;
      octet1, octet2: Octet;
      tailleFichier1, tailleFichier2: Int64;
    begin
      AssignFile(fichier1, aNomFichier1);
      AssignFile(fichier2, aNomFichier2);
     
      {$I-}
      Reset(fichier1);
      result := IOResult = 0;
      if result then
      begin
        Reset(fichier2);
        result := IOResult = 0;
        if not result then
          CloseFile(fichier1);
      end;
      {$I+}
     
      if not result then
        Exit;
     
      tailleFichier1 := FileSize(fichier1);
      tailleFichier2 := FileSize(fichier2);
     
      result := tailleFichier1 = tailleFichier2;
     
      if not result then
      begin
        CloseFile(fichier1);
        CloseFile(fichier2);
        Exit;
      end;
     
      while result and not EOF(fichier1) do
      begin
        Read(fichier1, octet1);
        Read(fichier2, octet2);
        result := octet1 = octet2;
      end;
     
      CloseFile(fichier1);
      CloseFile(fichier2);
    end;
     
    begin
      WriteLn(CompareFichiers('image.jpg', 'image - Copie.jpg'));
    end.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 069
    Points : 15 448
    Points
    15 448
    Billets dans le blog
    9
    Par défaut
    Une variante (beaucoup plus rapide) utilisant BlockRead au lieu de Read :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    type
      Octet = Byte;
      TFichier = file of Octet;
     
    function CompareFichiers(const aNomFichier1, aNomFichier2: string): Boolean;
    const
      TAILLE_TAMPON = 256;
    var
      fichier1, fichier2: TFichier;
      tailleFichier1, tailleFichier2: Int64;
      tampon1, tampon2: array[0..TAILLE_TAMPON - 1] of Octet;
      octetsLus, iOctet: Word;
    begin
      AssignFile(fichier1, aNomFichier1);
      AssignFile(fichier2, aNomFichier2);
     
      {$I-}
      Reset(fichier1, 1);
      result := IOResult = 0;
      if result then
      begin
        Reset(fichier2, 1);
        result := IOResult = 0;
        if not result then
          CloseFile(fichier1);
      end;
      {$I+}
     
      if not result then
        Exit;
     
      tailleFichier1 := FileSize(fichier1);
      tailleFichier2 := FileSize(fichier2);
     
      result := tailleFichier1 = tailleFichier2;
     
      if not result then
      begin
        CloseFile(fichier1);
        CloseFile(fichier2);
        Exit;
      end;
     
      repeat
        BlockRead(fichier1, tampon1, TAILLE_TAMPON, octetsLus);
        BlockRead(fichier2, tampon2, TAILLE_TAMPON, octetsLus);
        iOctet := 0;
        while result and (iOctet < octetsLus) do
        begin
          result := tampon1[iOctet] = tampon2[iOctet];
          Inc(iOctet);
        end;
      until octetsLus < TAILLE_TAMPON;
     
      CloseFile(fichier1);
      CloseFile(fichier2);
    end;
     
    begin
      WriteLn(CompareFichiers('image.jpg', 'image - Copie.jpg'));
    end.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Bonjour,

    Oui, BlockRead a toujours été la bonne méthode pour ce genre de travail, je m'en étais entre autres servi pour mon implémentation de calculs de hash (CRC, md*, ...)

    ps : ne me demande pas mon code pour ces fonctions, c'est mon employeur de l'époque qui en est propriétaire.

    Si les cons volaient, il ferait nuit à midi.

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 416
    Points : 5 814
    Points
    5 814
    Par défaut
    salut

    utiise les TMemorystream c'est pratique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    function CompareFiles(aBaseFileName,aCompareFileName : String): boolean;
    begin
      Result := FALSE;
      //Instantiate the two memory streams
      FBaseStream := TMemoryStream.Create;
      FCompareStream := TMemoryStream.Create;
     
      try
        //Load both files into their respective streams...
        FBaseStream.LoadFromFile(aBaseFileName);
        FCompareStream.LoadFromFile(aCompareFileName);
     
        //...and compare them
        Result := (FBaseStream.Size = FCompareStream.Size) and
                   CompareMem(FBaseStream.Memory, FCompareStream.Memory, FBaseStream.Size);
      finally
        //Tidy up
        FBaseStream.Free;
        FCompareStream.Free;
        FBaseStream := Nil;
        FCompareStream := Nil;
      end;
    end;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Bonjour,
    Citation Envoyé par anapurna Voir le message
    utiise les TMemorystream c'est pratique
    Oui, c'est pratique, mais ça pose des problème si les fichiers sont trop gros (essaye ta fonction sur des fichiers de 2 ou 3 Go ! [si si, ça existe fréquemment selon le domaine qu'on traite])
    Si les cons volaient, il ferait nuit à midi.

  10. #10
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 069
    Points : 15 448
    Points
    15 448
    Billets dans le blog
    9
    Par défaut
    Merci pour vos réponses. Je crois que nous avons plus ou moins fait le tour du sujet.

    Il y a cependant encore une chose sur laquelle j'aimerais vous questionner, ce sont les "calculs de hash" dont parlait droggo. En un mot, qu'est-ce que c'est ? Et en quoi cela peut-il se substituer (avantageusement ou non) à une comparaison octet par octet ?
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  11. #11
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Hello

    Pour des questions de performance, j'essaierai de lire des blocs de taille fixe (par exemple, 16k ou 32k, mais ça dépend de la taille du fichier et donc du nombre de blocs à traiter par la suite) puis de calculer un checksum sur ces blocs puis de les comparer.

    Les checksum/hash permettent d'avoir une sorte de signature d'un volume de données. Si les signatures sont égales, les blocs de données sont égaux. Tu peux regarder md5 pour cela, il devrait exister des implémentations Pascal...
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  12. #12
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 069
    Points : 15 448
    Points
    15 448
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par M.Dlb Voir le message
    Tu peux regarder md5 pour cela, il devrait exister des implémentations Pascal...
    Merci pour ta réponse. Ah oui, tiens, il existe une unité md5 livrée avec FPC.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    uses
      md5;
     
    var
      hash1, hash2: string;
     
    begin
      hash1 := MD5Print(MD5File('image1.jpg'));
      hash2 := MD5Print(MD5File('image2.jpg'));
      WriteLn(hash1);
      WriteLn(hash2);
      WriteLn(hash1 = hash2);
      ReadLn;
    end.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  13. #13
    Membre éclairé

    Homme Profil pro
    Rédacteur technique (retraité)
    Inscrit en
    Octobre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique (retraité)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 168
    Points : 807
    Points
    807
    Par défaut
    Bonjour,

    Citation Envoyé par M.Dlb Voir le message
    Les checksum/hash permettent d'avoir une sorte de signature d'un volume de données. Si les signatures sont égales, les blocs de données sont égaux. Tu peux regarder md5 pour cela, il devrait exister des implémentations Pascal...
    N'y aurait-il pas une erreur fondamentale dans ce prédicat ?

    Il me semble qu'au contraire c'est la différence des signatures qui indique, à coup sûr, que les données sont différentes.
    L'égalité des signatures ne constituant qu'une probabilité d'égalité des données.

    Par ailleurs, en termes de performances, l'emploi de clés (CRC, MD5, etc.) pour comparer deux fichiers ne seraient intéressante que si les clés étaient pré-calculées et embarquées dans les fichiers de donnée. Sinon le calcul des clés nécessitera le parcours intégral des deux fichiers ce qui prendra toujours plus de temps que la comparaison simple laquelle peut cesser dès la première différence trouvée.

  14. #14
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Citation Envoyé par DomDA91 Voir le message
    Par ailleurs, en termes de performances, l'emploi de clés (CRC, MD5, etc.) pour comparer deux fichiers ne seraient intéressante que si les clés étaient pré-calculées et embarquées dans les fichiers de donnée. Sinon le calcul des clés nécessitera le parcours intégral des deux fichiers ce qui prendra toujours plus de temps que la comparaison simple laquelle peut cesser dès la première différence trouvée.
    Lire intégralement 2 fichiers et les comparer octet par octet (ou int, etc.) ne sont pas la même chose.
    Si les cons volaient, il ferait nuit à midi.

  15. #15
    Membre éclairé

    Homme Profil pro
    Rédacteur technique (retraité)
    Inscrit en
    Octobre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Rédacteur technique (retraité)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 168
    Points : 807
    Points
    807
    Par défaut
    Citation Envoyé par droggo Voir le message
    Lire intégralement 2 fichiers et les comparer octet par octet (ou int, etc.) ne sont pas la même chose.
    Ah oui ? J'aimerai bien qu'on m'explique comment on peut comparer deux fichiers sans devoir les lire intégralement de bout en bout (sauf, comme je l'ai indiqué, à interrompre la lecture dès la première différence trouvée s'il y en a) !

  16. #16
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Bonjour,
    Citation Envoyé par DomDA91 Voir le message
    Ah oui ? J'aimerai bien qu'on m'explique comment on peut comparer deux fichiers sans devoir les lire intégralement de bout en bout (sauf, comme je l'ai indiqué, à interrompre la lecture dès la première différence trouvée s'il y en a) !
    Quand on s'occupe du calcul de hash, on lit le fichier sans s'occuper en détail de ce qu'il y a dedans, ce ne sont que des données qu'on intègre dans un calcul (si tu ne sais pas de quoi on parle, regarde par exemple l'algorithme du calcul de md5).
    Si les cons volaient, il ferait nuit à midi.

  17. #17
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 069
    Points : 15 448
    Points
    15 448
    Billets dans le blog
    9
    Par défaut
    Merci pour vos réponses.

    J'ai rassemblé dans une unité les solutions proposées (plus une autre que j'ai trouvée ailleurs) et écrit un programme de test. Les temps d'exécution varient tellement d'une fois à l'autre qu'il est impossible d'en tirer une conclusion. Tout ce que j'ai remarqué, c'est que la taille des blocs lus influe beaucoup sur le temps d'exécution.

    J'ai retouché la fonction que j'avais postée plus haut, parce que je me suis aperçu que je n'avais pas suffisamment pris en compte le cas de deux fichiers différents mais de taille identique.
    Fichiers attachés Fichiers attachés
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  18. #18
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 718
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 718
    Points : 15 098
    Points
    15 098
    Par défaut
    Bonsoir,

    petite modif en bas du fichier test.pas, afin de lui faire accepter deux paramètres sur la ligne de commande, ce qui est bien sympathique à l'usage
    mise en commentaire des deux lignes de constantes, et ajout de 3 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    {const
      FICHIER1 = 'fichier1.zip'; // **** à modifier ****
      FICHIER2 = 'fichier2.zip'; // **** à modifier ****  }
     
    var
      i: integer;
      FICHIER1,FICHIER2: string; // ajout
     
    begin
      FICHIER1 := paramstr(1); // ajout
      FICHIER2 := paramstr(2); // ajout
    Pas touché au reste, et ma foi, ça fonctionne.

    Bien joué, Roland !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  19. #19
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 114
    Points
    114
    Par défaut
    Bonjour à tous,

    Une discussion intéressante. Je trouve que la remarque de DomDA91 est pertinente. En résumé, il y a un dilemme entre faire les choses de façon sûre mais lente et faire les choses efficacement avec des risques d'erreurs mais de façon plus rapide.

    L'algorithme MD5 a une page wiki qui lui est dédiée : https://fr.wikipedia.org/wiki/MD5
    Il n'est pas considéré comme sûr, d'autres algorithmes (qui ne seront jamais totalement sûrs puisqu'ils utilisent le hashage, deux objets de couleur rouge ne sont pas forcément identiques par exemple) ont été suggérés à sa place.

    Du peu que je comprends, sans être expert.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparaison de deux fichiers Excel
    Par Fab_lux dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/08/2007, 21h41
  2. comparaison de deux fichiers
    Par john123 dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 17/03/2007, 16h38
  3. Comparaison de deux fichiers EXCEL
    Par meufeu dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/10/2006, 22h56
  4. comparaison de deux fichiers textes
    Par chmaichel dans le forum Delphi
    Réponses: 1
    Dernier message: 28/07/2006, 11h35
  5. [langage] Comparaison de deux fichiers
    Par perlgirl dans le forum Langage
    Réponses: 4
    Dernier message: 04/05/2005, 16h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo