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

 Delphi Discussion :

Comparer 2 fichiers


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2020
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2020
    Messages : 33
    Points : 29
    Points
    29
    Par défaut Comparer 2 fichiers
    Bonjour à tous.
    J’ai encore besoin de votre aide, je cherche une routine silencieuse (rien ne s'affiche à l'écran ) pour tester si 2 fichiers sont identiques. Ca fait plusieurs jours que je cherche, sur ce site et autre, Google, je ne trouve pas la solution miracle. La routine ouvre les 2 fichiers, teste, s’ils sont identiques, si oui, message ’Fichiers conformes’ autrement, message ’fichiers différents’

    La routine serait du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function Compare (Fichier1, Fichier2)
    Merci pour votre aide.

    J'oublie à chaques fois, GRRRRRR. Je suis sous delphi 2010 Architect

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 673
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 673
    Points : 7 054
    Points
    7 054
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  3. #3
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 504
    Points : 2 776
    Points
    2 776
    Billets dans le blog
    10
    Par défaut Calcul checksum
    Tu peux calculer le checksum du ficher ou totaliser la somme des octets du fichier (j'ai un exemple si tu veux). Pour le checksum il y a un exemple sur ChatGPT (je n'ai pas testé)

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 763
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 763
    Points : 13 381
    Points
    13 381
    Par défaut
    Un simple CompareMem sur deux TMemoryStream.

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 586
    Points : 25 262
    Points
    25 262
    Par défaut
    Citation Envoyé par zounar_j5 Voir le message
    . Ca fait plusieurs jours que je cherche, sur ce site et autre, Google, je ne trouve pas la solution miracle.

    Et aucun code à nous fournir ?
    On aurait pu t'aider à corriger un début de code que tu aurais commencé.

    Déjà, selon la taille des fichiers, ont peu faire des choix différents, si petits ou moyens, avec la RAM disponible actuellement, on peut se permettre certaines choses que l'on aurait pas fait il y a dix ans.
    Le CompareMem proposé par Andnotor fait parti des solutions très simple pour les petits et moyens fichiers.

    Si tu as dois comparer des fichiers de plusieurs centaines de Mo, peut-être que l'on peut faire moins lourd en mémoire et CPU
    Sinon c'est un algo basique, une boucle qui lit le fichier bloc par bloc, ça te prendra pas plus d'une heure à coder

    Code algo : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Si Taille(Fichier1) = Taille(Fichier2) alors
      Tant que pas la Fin(Fichier1) faire
         Lire(Fichier1, Tampon1) 
         Lire(Fichier2, Tampon2)
         Si Tampon1 != Tampon2 alors  
           Sortir Différent
    sinon
      Sortir Différent

    Inutile de comparer tout le contenu, dès qu'il y a une différence, c'est que c'est différent, vouloir parser l'ensemble du fichier ne se produira que pour des fichiers identiques.


    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
    function FileCompare(const AFileName1, AFileName2: TFileName): Boolean;
    const
      BUF_SIZE = High(Word)+1;
    var
      FS1, FS2: TFileStream;
      Size: Int64;
      B1, B2: array[0..BUF_SIZE-1] of Byte;
      Readed1, Readed2: Integer;
    begin
      Result := False;
     
      FS1 := TFileStream.Create(AFileName1, fmOpenRead); // raise EFCreateError
      try
        FS2 := TFileStream.Create(AFileName2, fmOpenRead); // raise EFCreateError
        try
          Size := FS1.Size;
          if Size <> FS2.Size then
            Exit;
     
          while FS1.Position < Size do
          begin
            Readed1 := FS1.Read(B1[0], BUF_SIZE);
            Readed2 := FS2.Read(B2[0], BUF_SIZE);
            if Readed1 <> Readed2 then
              Exit;
     
            if not CompareMem(@B1[0], @B2[0], Readed1) then
              Exit;
          end;
     
          Result := True;
     
        finally
          FS2.Free();
        end;
      finally
        FS1.Free();
      end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2020
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2020
    Messages : 33
    Points : 29
    Points
    29
    Par défaut
    Merci ShaiLeTroll , ça marche du tonnerre. Merci aussi à tous. Bonne continuation. Bonne journée.

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

Discussions similaires

  1. [File]Comparer 2 fichiers
    Par onlytoine dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 05/12/2005, 17h24
  2. Fonction c qui compare deux fichiers ???
    Par babyface dans le forum C
    Réponses: 4
    Dernier message: 19/11/2005, 13h07
  3. Comparer 2 fichiers
    Par GuiltyX dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 10/11/2004, 01h35
  4. [LG][FAQ]comparer des fichiers
    Par lucke dans le forum Langage
    Réponses: 11
    Dernier message: 01/06/2003, 18h02
  5. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37

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