Bonjour à tous,

J'ai écrit un programme pour comparer deux fichiers binaires encodé en byte, double ou float.
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
 
#include <stdio.h>
#include <stdlib.h>
 
int comparerFichiersBinairesType(char * nomf1, char * nomf2, int nbOctet, float seuil);
int comparerFichiersBinairesTypeByte(char * nomf1, char * nomf2);
int comparerFichiersBinairesTypeDouble(char * nomf1, char * nomf2, float seuil);
int comparerFichiersBinairesTypeFloat(char * nomf1, char * nomf2, float seuil);
 
int main (int argc, char * argv[]){
	printf("%s %s %s %s\n",argv[1], argv[2],argv[3], argv[4]); 
	comparerFichiersBinairesType(argv[1], argv[2], atoi(argv[3]), atof(argv[4]));	
	return 0;
}
 
int comparerFichiersBinairesType(char * nomf1, char * nomf2, int nbOctet, float seuil){
	if (nbOctet == 1)
		comparerFichiersBinairesTypeByte(nomf1, nomf2); 
	else if (nbOctet == 4)
		comparerFichiersBinairesTypeFloat(nomf1, nomf2, seuil);
	else
		comparerFichiersBinairesTypeDouble(nomf1, nomf2, seuil);
	return 0;
}
 
int comparerFichiersBinairesTypeByte(char * nomf1, char * nomf2){
	FILE *fic1;
	FILE *fic2;
	int n1, n2, n3;
 
	fic1 = fopen(nomf1,"rb");
	fic2 = fopen(nomf2,"rb");
	if( fic1 == NULL || fic2 == NULL )
		return 0;
 
	while( fread(&n1, 1, 1,fic1)) {
		fread(&n2, 1, 1,fic2);
		if (n1 != n2) {
			// Fonction gererErreur
			printf("%s (valeur: %d) et %s (valeur: %d)\n", nomf1, n1, nomf2, n2);
			//system("! sh TnrMge.sh $ERR_FICHIERBINDIFF && exit $ERR_FICHIERBINDIFF");
		} 
	}	
	fclose(fic1);
	fclose(fic2);
	return 0;
}
 
int comparerFichiersBinairesTypeDouble(char * nomf1, char * nomf2, float seuil){
	FILE *fic1;
	FILE *fic2;
	double n1, n2;
	float ecartInf = 1.0 - seuil, ecartSup = 1.0 + seuil;
 
	fic1 = fopen(nomf1,"rb");
	fic2 = fopen(nomf2,"rb");
	if( fic1 == NULL || fic2 == NULL )
		return 0;
 
	while( fread(&n1, sizeof(double), 1,fic1)) {
		fread(&n2, sizeof(double), 1,fic2);
		if (n1 != n2) {
			if ((n2 < n1*ecartInf) || (n2 > n1*ecartSup)){ 
				// Fonction gererErreur
				printf("%s (valeur: %lf) et %s (valeur: %lf)\n", nomf1, n1, nomf2, n2);
				//system("! sh TnrMge.sh $ERR_FICHIERBINDIFF && exit $ERR_FICHIERBINDIFF");
			}
		}
	}	
	fclose(fic1);
	fclose(fic2);
	return 0;
}
 
int comparerFichiersBinairesTypeFloat(char * nomf1, char * nomf2, float seuil){
	FILE *fic1;
	FILE *fic2;
	float n1, n2;
	float ecartInf = 1.0 - seuil, ecartSup = 1.0 + seuil;
 
	fic1 = fopen(nomf1,"rb");
	fic2 = fopen(nomf2,"rb");
	if( fic1 == NULL || fic2 == NULL )
		return 0;
 
	while( fread(&n1, sizeof(float), 1,fic1)) {
		fread(&n2, sizeof(float), 1,fic2);
		if (n1 != n2) {
			if ((n2 < n1*ecartInf) || (n2 > n1*ecartSup)){ 
				// Fonction gererErreur
				printf("%s (valeur: %f) et %s (valeur: %f)\n", nomf1, n1, nomf2, n2);
				//system("! sh TnrMge.sh $ERR_FICHIERBINDIFF && exit $ERR_FICHIERBINDIFF");
			}
		}
	}	
	fclose(fic1);
	fclose(fic2);
	return 0;
}
Sur ma machine, ce code fonctionne correctement (Mandriva est l'OS). Cependant, sur un autre poste ayant une autre version de Mandriva, il ne fonctionne pas.
Pourriez vous m'aidez? J'aimerais comprendre où est le problème et le résoudre.
Merci par avance