Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1395 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Comparer 2 fichiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Comparer 2 fichiers

n°125798
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 15-04-2002 à 00:20:06  profilanswer
 

Bonjour,
 
j'aimerais pouvoir comparer 2 fichiers texte, plus globalement 2 fichiers, voire les différences à l'octet prêt.
Voici ce que j'ai tapé :
 
[code]
OpenDialog1->InitialDir = "C:\\";
OpenDialog1->Title = "Exécutable texte original";
if (OpenDialog1->Execute())
 {
 AnsiString fich_org = OpenDialog1->FileName;
 FILE *fichier_org;
 bool fichier_org_ouvert = false;
 char buf_org[255];
 
 OpenDialog1->InitialDir = "C:\\";
 OpenDialog1->Title = "Exécutable texte #2";
 if (OpenDialog1->Execute())
  {
  AnsiString fich_numd = OpenDialog1->FileName;
  FILE *fichier_numd;
  bool fichier_numd_ouvert = false;
  char buf_numd[255];
 
  if ((fichier_org = fopen(fich_org.c_str(), "rb" )) == NULL)
   ShowMessage("Impossible d'ouvrir le fichier " + ExtractFileName(fich_org));
  else
   fichier_org_ouvert = true;
 
  if ((fichier_numd = fopen(fich_numd.c_str(), "rb" )) == NULL)
   ShowMessage("Impossible d'ouvrir le fichier " + ExtractFileName(fich_numd));
  else
   fichier_numd_ouvert = true;
 
  if (fichier_org_ouvert && fichier_numd_ouvert)
   {
   int i=0;
   while (! feof(fichier_org))
    {
    fseek(fichier_org, i, SEEK_SET);
    fread(buf_org, 1, 1, fichier_org);
 
    fseek(fichier_numd, i, SEEK_SET);
    fread(buf_numd, 1, 1, fichier_numd);
 
    if (buf_org != buf_numd)
     {
     Memo2->Lines->Add(buf_numd); //affiche les !=
     }
    i++;
    }
   }
 
  fclose(fichier_org);
  fclose(fichier_numd);
 
  StatusBar1->Panels->Items[0]->Text = buf_org[30] + buf_numd[30];
  }
 }
 
mais mon Memo2 contient
 

uô
êô
sô
 ô
 ô
 ô
(ô
Pô
oô
rô
tô
uô
gô
uô
eô
sô
eô
)ô
ô etc.......
 
même quand mes 2 fichiers texte sont identiques !!!
Où ai-je fait l'erreur à votre avis ?
N'oubliez pas que je voudrait comparer tout types de fichiers, à l'octet prêt ...
 
merci d'avance :hello:


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
mood
Publicité
Posté le 15-04-2002 à 00:20:06  profilanswer
 

n°125804
bjbebert
Posté le 15-04-2002 à 01:54:16  profilanswer
 

buf_org et buf_numd sont définis comme des tableaux de char, donc des pointeurs.
Donc, le 'if (buf_org != buf_numd)' compare 2 adresses, qui sont forcément différentes.
Il faudrait comparer le contenu de ces 2 tableaux.

n°125840
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 15-04-2002 à 09:53:50  profilanswer
 

bjbebert a écrit a écrit :

buf_org et buf_numd sont définis comme des tableaux de char, donc des pointeurs.
Donc, le 'if (buf_org != buf_numd)' compare 2 adresses, qui sont forcément différentes.
Il faudrait comparer le contenu de ces 2 tableaux.  




oky merci beaucoup, je suis cette piste !!!
 
@++ :hello:


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°125841
karlkox
Posté le 15-04-2002 à 10:00:41  profilanswer
 

compare le contenu des 2 buffers avec strcmp, ca devrait suffire je pense.

n°126277
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 15-04-2002 à 19:13:16  profilanswer
 

KarLKoX a écrit a écrit :

compare le contenu des 2 buffers avec strcmp, ca devrait suffire je pense.  




salut, j'ai fait if (buf_org[0] != buf_numd[0])
 
ça marche, masi je suis trop con j'ai pas pensé à strcmp()...
 
merci à vous 2 ;)


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°126739
bjbebert
Posté le 16-04-2002 à 18:17:14  profilanswer
 

Tu dis que tu veux comparer 2 fichiers quelconques. Or, strcmp compare des chaines de caractères (terminées par un 0).
 
Comment tu fais si ton fichier contient un octet à 0, ou que tes buffer de 255 octets ne se terminent pas par un 0 :ange:  
 
J'ai l'impression qu'il faudrait plutot utiliser des buffers de type void *, et comparer 'à la main' (une boucle).
 
Edit : le 'if (buf_org[0] != buf_numd[0])', il ne compare que le premier octet de chaque buffer, pas l'ensemble.

 

[jfdsdjhfuetppo]--Message édité par bjbebert--[/jfdsdjhfuetppo]

n°126742
youdontcar​e
Posté le 16-04-2002 à 18:31:36  profilanswer
 

bjbebert a écrit a écrit :

J'ai l'impression qu'il faudrait plutot utiliser des buffers de type void *, et comparer 'à la main' (une boucle).


ou mieux, utiliser memcmp() au lieu de roue_version_447875454().

n°126756
bjbebert
Posté le 16-04-2002 à 19:49:29  profilanswer
 

youdontcare a écrit a écrit :

ou mieux, utiliser memcmp() au lieu de roue_version_447875454().  



Oui, on peut aussi :D

n°126800
kenshiro18​2
Posté le 16-04-2002 à 22:09:30  profilanswer
 

youdontcare a écrit a écrit :

ou mieux, utiliser memcmp() au lieu de roue_version_447875454().  




Non, on utilise std::mismatch car on fait du c++ de haut vol :-)

n°126801
bjbebert
Posté le 16-04-2002 à 22:14:44  profilanswer
 

kenshiro182 a écrit a écrit :

 
Non, on utilise std::mismatch car on fait du c++ de haut vol :-)


Nan mais ca va la tete :pt1cable:

mood
Publicité
Posté le 16-04-2002 à 22:14:44  profilanswer
 

n°126813
kenshiro18​2
Posté le 16-04-2002 à 22:40:45  profilanswer
 

bjbebert a écrit a écrit :

Nan mais ca va la tete :pt1cable:  




Attends, j'appelle Bjarne :-)  
Bjarne, vient m'aiderrrrr  !!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Comparer 2 fichiers

 

Sujets relatifs
JAVA : envoi de fichiers sur ftpenvoi de fichiers par ftp avec pl/sql sous Oracle
[javascript]Appel de fichiers js[Script] Renommer tous les fichiers d'un répertoire
mail html + fichiers en php[PHP/NT]donner les droits de modifications de fichiers a un script php
[C++] Comparer deux tableaux ?Faire une librairie a partir de plusieurs fichiers obj. Comment faire?
[UNIX SHELL + C] Fichiers ouverts ?[Visual Basic] Export de BD Access vers fichiers Excel...
Plus de sujets relatifs à : [C++] Comparer 2 fichiers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR