Bonjour,
Je cherche depuis quelque temps mais impossible encore pour moi de comprendre pourquoi fread me retourne 0 alors qu'il pourrait lire normalement les données que j'observe comme correctement écrites dans le fichier avec editHexa. Je n'ai pas l'habitude d'utiliser visual studio peut être il y a une drôlerie Windowsienne qui m’échappe...
Ce que je ne comprends pas c'est que mon offset est bien de 0x96 lors du 1er appel de fread et le fichier binaire contient 0x87A octets avec le pointeur de flux à 0x201 donc fread devrait bien être capable de lire ces 0x96 octets même si ils ne correspondaient pas à ce qu'il attend les chiffres serraient juste incohérents mais en fait fread me retourne 0 et rend le flux (fAnaFile) à 0x87A (cad à la fin du fichier)
le code :
Pour info les structures de données ecrites dans le fichier on été déclarées avec #pragma pour éviter les problèmes d'aligement/padding :
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 long lRetCode; FILE *fAnaFile; size_t iRetRead; int iferrorReturn; int ifseekret; size_t offset; long offset; T_C32_FILTRE debugpF; fAnaFile = fopen(sAnaFile,"r"); if (fAnaFile != NULL) { offset = sizeof(T_C32_RESULT_HEADER)+(sizeof(T_C32_FILTRE)*resultIdx)+1; // Placer le flux au bon endroit pour lire les donnees d'un filtre ifseekret=fseek(fAnaFile, offset, SEEK_SET); // Lire les resultat d'analyse d'un filtre iRetRead = fread(&debugpF, sizeof(debugpF), 1,fAnaFile); perror("Erreur :"); iferrorReturn = ferror(fAnaFile); fclose(fAnaFile); if(iRetRead == 1) lRetCode=EXIT_SUCCESS; else lRetCode=EXIT_ERROR_READ_FILTER; }
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 // Alignement sur un octet #pragma pack(push, 1) //#pragma pack(1) // Structure d'un filtre #define T_C32_FILTRE struct _T_C32_FILTRE_ T_C32_FILTRE { short iNum; ... }; // Structure entete de resultat #define T_C32_RESULT_HEADER struct _T_C32_RESULT_HEADER_ T_C32_RESULT_HEADER { T_C32_PARAM rPar; float fXstep; // AB (ajout) : distance entre 2 mesures consecutives lue dans l'en-tête du fichier frame short iNumFiltres; // Nombre de filtres contenus ... }; #pragma pack(pop)
Partager