IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VC++ .NET Discussion :

Problème de lecture avec fread qui retourne 0


Sujet :

VC++ .NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2011
    Messages : 24
    Points : 28
    Points
    28
    Par défaut Problème de lecture avec fread qui retourne 0
    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 :
    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;
            }
    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
    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)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    "sizeof(debugpF)" vaut combien ?
    Si c'est du binaire, indiquez-le au moment de la création de fAnaFile.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2011
    Messages : 24
    Points : 28
    Points
    28
    Par défaut
    précision : fread semble perdre les pédales au niveau du dernier champ de la structure qui est en fait un tableau d'une autre structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Structure 
    #define T_C32_FILTRE struct _T_C32_FILTRE_
    T_C32_FILTRE
    {
    	short	iNumC;					 
    ...
    	T_C32_C	arrC[MAX];	 
    };
    Cela doit poser problème mais j'ai du mal à comprendre pourquoi...

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2011
    Messages : 24
    Points : 28
    Points
    28
    Par défaut
    sizeof(debugpF) = 0x96

    quand on écrit :
    fAnaFile = fopen(sAnaFile,"w");
    fwrite(...)

    il ne s'agit pas forcement d'un fichier binaire?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2011
    Messages : 24
    Points : 28
    Points
    28
    Par défaut
    en effet mon problème était bien l'option "w" et "r" de fopen avec "wb" (pour l'écriture) et "rb" (pour la lecture) plus aucun problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de Lecture avec fread, feof retourne 16
    Par neoangelo5 dans le forum C
    Réponses: 10
    Dernier message: 14/04/2011, 15h37
  2. Réponses: 2
    Dernier message: 11/05/2010, 09h27
  3. problème lecture avec fread
    Par xeron33 dans le forum C
    Réponses: 1
    Dernier message: 18/06/2008, 23h04
  4. Réponses: 17
    Dernier message: 24/03/2005, 12h24
  5. [DOM] Problème de lecture avec DOM
    Par samios dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 29/09/2004, 15h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo