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