suite à la question du forum de LordBob, voici une petite source
traitant de longueur de fichier et parcours
Ce programme permet de comparer simplement deux fichiers :
Soit ils sont de longueur différentes et ils sont forcément différents
Soit ils sont de même longueur et le premier octet différent est donné
ainsi que sa position
n'utilise que du C++ standard !
Source / Exemple :
#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;
}
Conclusion :
il y a beaucoup plus puissant ... en DOS : fc, comp, diskcomp
et en Windows : windiff (dans les outils livrés avec visual C++)
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.