C c++ fread avec une structure

doudouyam Messages postés 5 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 22 juin 2005 - 21 juin 2005 à 15:03
doudouyam Messages postés 5 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 22 juin 2005 - 22 juin 2005 à 16:44
Bonjour;
Je dois lire un fichier binaire d une image et ds un premier tps j essaye de recuperer l entete ki decrit cette image. Pour ca je creer une structure contenant ces info et je lis le fichier avec cette structure. (cf code)
Mais lorsque je fait ca, les valeurs sont fausses, plus exactement les deux long de la structure en exemple (normalement cette structure est bcp plu grossse) Alors ke si je lis tt les elements de la structure un par un, les valeurs sont exactes.


voila code (en simplifier)



typedef struct{
char Signature[5];
char Version[5];
char FinDeFichier;
long TailleEnteteFilm;
long TailleEnteteTrame;
}



main(){


FILE *fp;
char *file="Nom du fichier";
TypeFilm TF;


if((fp=open(file,"rb"))==NULL)
return ERROR;


rewind(fp);



/*********************************************************************/
METHODE 1
/*********************************************************************/


if(fread(&TF,sizeof(TypeFilm),1,fp)!=1)
return ERROR;


/*********************************************************************/
METHODE 2
/*********************************************************************/


/*
if(fread(&TF.Signature,sizeof(TF.Signature),1,fp)!=1)
return ERROR;



if(fread(&TF.Version,sizeof(TF.Version),1,fp)!=1)
return ERROR;



if(fread(&TF.FinDeFichier,sizeof(TF.FinDeFichier),1,fp)!=1)
return ERROR;



if(fread(&TF.TailleEnteteFilm,sizeof(TF.TailleEnteteFilm),1,fp)!=1)
return ERROR;



if(fread(&TF.TailleEnteteTrame,sizeof(TF.TailleEnteteTrame),1,fp)!=1)
return ERROR;
*/
/*********************************************************************/



}

7 réponses

Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
21 juin 2005 à 20:17
if(fread(TF,sizeof(TypeFilm),1,fp)!=1)

return ERROR;


(TP est un pointeur)
_______________________


Omnia vincit labor improbus
doudouyam Messages postés 5 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 22 juin 2005
22 juin 2005 à 08:38
re

j ai modifier selon tes conseils voila comment j ai fait

TypeFilm *TF;

TF=(TypeFilm *)malloc(sizeof(TypeFilm));
....
...
..
.
if(fread(TF,sizeof(TypeFilm),1,fp)!=1)
return ERROR;

:ais le resultat est tjrs le mene ... Auriez vous une idee ??? ( Ca fait 2 jours ke je suis la dessus je sais plus koi faire ).
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
22 juin 2005 à 11:52
ben moi ce qui membete dans ton code c'est qu'on sait pas ce que c'est TypeFilm....

le rewind ne sert a rien j pense

pour le 'long', evites .... essaye plutot double; si tu peux précises si il est signé ou non, si c'est un integer,...

sinon je sé pas

_______________________


Omnia vincit labor improbus
doudouyam Messages postés 5 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 22 juin 2005
22 juin 2005 à 13:24
Ha oui desole j ai opublier de mettre le nom de la structure qui est TypeFilm.

Sinon je sais pas si se les valeurs sont signees ou non, je sais juste qu il fo ke je recupere 2 ou octets soit short ou long. C est sur;ent a ce niveau k il y a un probleme mais je ne sais pas koi faire.

je vais essayer de changer ces valeurs
Merci
++

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
doudouyam Messages postés 5 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 22 juin 2005
22 juin 2005 à 13:26
yep
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
22 juin 2005 à 14:05
"yep" mdr ca veut dire quoi ca t'as réussi ? :p

_______________________


Omnia vincit labor improbus
doudouyam Messages postés 5 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 22 juin 2005
22 juin 2005 à 16:44
non j ai fait une gaffe en envoyant mon post j ai voulu corriger une erreur ds celui d avt j ai oublie de mettre un chiffre "2 ou 4 octets"
Rejoignez-nous