- #include <fstream.h>
- #include <iostream.h>
- #include <string.h>
- // les entêtes modernes ne permettent pas d'utiliser ios::nocreate ni in1.fd()
- // avec visual C++ 6 ...
- //#include <fstream>
- //#include <iostream>
- //using namespace std;
-
- int main(int argc, char** argv) {
- if (argc < 3)
- { cout << "usage compare fichier1 fichier2" << endl; return 1;}
-
- char *fic1 = new char [strlen(argv[1]+1)];
- strcpy(fic1,argv[1]);
- char *fic2 = new char [strlen(argv[2]+1)];
- strcpy(fic2,argv[2]);
-
- unsigned char c1= 0, c2=0;
- {
- int cpt=0;
- //tentons d'ouvrir les fichiers en se plaçant directement à la fin
- //ceci pour mesurer facilement leur longueur
- ifstream in1(fic1, ios::nocreate | ios::ate, filebuf::sh_read );
- if (in1.fd()==-1) { cout << fic1 << " non trouve" << endl; return 1;}
- ifstream in2(fic2, ios::nocreate | ios::ate, filebuf::sh_read );
- if (in2.fd()==-1) { cout << fic2 << " non trouve" << endl; return 1;}
-
- //vérification des longueurs
- streampos l1 = in1.tellg(); // la position est égale à la taille du fichier
- in1.seekg(0, ios::beg);//retour au départ
- streampos l2 = in2.tellg();
- in2.seekg(0, ios::beg);
-
- if (l1 != l2)
- {
- cout << "fichiers de longueurs differentes" << endl;
- return 0;
- }
- cout << "fichiers de longueurs identiques = " << l1 << endl;
- bool bIdem=true;
- //lecture
- while ( ( in1 >> c1) && ( in2 >> c2 ) )
- {
- cpt++;
- if (c1!=c2)
- {
- cout << "fichiers differents : octet no: " << cpt << endl;
- //pour fichiers binaires, on donne les valeurs hexadécimales
- // cout << hex << (int)c1 << " => " << (int)c2 << endl;
- //pour fichiers textes on donne simplement les caractères
- cout << c1 << " => " << c2 << endl;
- bIdem=false;
- break;
- }
- } // Le Destructeur ferme in
- if (bIdem) cout << "fichiers identiques" << endl;
- }
- return 0;
- }
-
-
#include <fstream.h>
#include <iostream.h>
#include <string.h>
// les entêtes modernes ne permettent pas d'utiliser ios::nocreate ni in1.fd()
// avec visual C++ 6 ...
//#include <fstream>
//#include <iostream>
//using namespace std;
int main(int argc, char** argv) {
if (argc < 3)
{ cout << "usage compare fichier1 fichier2" << endl; return 1;}
char *fic1 = new char [strlen(argv[1]+1)];
strcpy(fic1,argv[1]);
char *fic2 = new char [strlen(argv[2]+1)];
strcpy(fic2,argv[2]);
unsigned char c1= 0, c2=0;
{
int cpt=0;
//tentons d'ouvrir les fichiers en se plaçant directement à la fin
//ceci pour mesurer facilement leur longueur
ifstream in1(fic1, ios::nocreate | ios::ate, filebuf::sh_read );
if (in1.fd()==-1) { cout << fic1 << " non trouve" << endl; return 1;}
ifstream in2(fic2, ios::nocreate | ios::ate, filebuf::sh_read );
if (in2.fd()==-1) { cout << fic2 << " non trouve" << endl; return 1;}
//vérification des longueurs
streampos l1 = in1.tellg(); // la position est égale à la taille du fichier
in1.seekg(0, ios::beg);//retour au départ
streampos l2 = in2.tellg();
in2.seekg(0, ios::beg);
if (l1 != l2)
{
cout << "fichiers de longueurs differentes" << endl;
return 0;
}
cout << "fichiers de longueurs identiques = " << l1 << endl;
bool bIdem=true;
//lecture
while ( ( in1 >> c1) && ( in2 >> c2 ) )
{
cpt++;
if (c1!=c2)
{
cout << "fichiers differents : octet no: " << cpt << endl;
//pour fichiers binaires, on donne les valeurs hexadécimales
// cout << hex << (int)c1 << " => " << (int)c2 << endl;
//pour fichiers textes on donne simplement les caractères
cout << c1 << " => " << c2 << endl;
bIdem=false;
break;
}
} // Le Destructeur ferme in
if (bIdem) cout << "fichiers identiques" << endl;
}
return 0;
}