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

C Discussion :

Problème de Lecture avec fread, feof retourne 16


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 28
    Par défaut Problème de Lecture avec fread, feof retourne 16
    Bonjours,

    j'ai un problème avec ma fonction fread.
    Je doit lire un fichier généré en Pascal avec du C.

    j'ai vérifié la concordance des structures (taille octet,correspondance des types pascal / C j'ai même du utiliser un # pragma pack (1) car j'avais un problème d'alignement mémoire sur ma structure.

    Lorsque je fait mon fread j'arrive à récupérer les 3 premier champs de ma structure correctement et après j'ai des valeur incohérent.

    Je fais un feof et un ferror pour savoir ou est le problème.
    ferror me retourne 0
    feof me retourne 16

    EDIT :
    le fread me retourne 0.
    et il me remplis que les 4 premier champs et ne remplis pas le reste (les valeur incohérente sont des valeur d’initialisation du compilateur.

    Je utilise Visual C++ 6.0

    j'ai l'impression que il arrêt de lire le fichier.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            TModele Model;
    	Handle=fopen("test.MOD","r");
     
            if(Handle ==NULL)
    	{
    		exit(1);
    	}else{
     
    		lecture=fread(&Model,sizeof(TModele),1,Handle);
     
    		error=feof(Handle);
                    error=ferror(Handle);
            }

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    C'est les joies de la sauvegarde d'une structure dans un fichier avec une fonction équivalent Pascal de fwrite(). Ce n'est pas portable! Il faut définir explicitement et implanter à la main un schéma de sérialisation des données. De simples fwrite() / fread() ne peuvent pas faire le job de manière satisfaisante, surtout si le compilateur n'est pas le même pour le programme qui écrit et celui qui lit.

    Le livre "C Unleashed" traîte ce point sur un chapitre complet dont je recommande la lecture, si vous avez une bonne bibliothèque non loin de chez vous.

    Avec mes meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 28
    Par défaut
    Merci je regarderais ce livre.
    En attendant j'ai enregistré mon résultat dans un fichier et compare les fichiers.
    Le problème et que je ne peut pas modifier le logiciel fait en pascal pour faire un sérialisation correct.
    Je suis dans une impasse.

  4. #4
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Citation Envoyé par neoangelo5 Voir le message
    Je suis dans une impasse.
    Pas tant que ça. Avec un petit peu de patience, tu dois pouvoir retrouver le boutisme et le format de chaque champ. Il faut voir ça comme une sorte de hacking ou de reverse engineering. D'autant plus, si j'ai bien compris, qu'il n'y a qu'un seul type de structure dans ton fichier. Ca se fait couramment. C'est même très intéressant.

    A+

    Pfeuh

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 28
    Par défaut
    Il s'agit d'une structure qui contient d'autre structure voilas pourquoi j'ai bien vérifier la concordance des octets avec les type pascal et C et que j'ai fait un #pragma pack(1) la structure Final Tmodel fait 120 0297 octet avec des structure et tableau deux dimension

  6. #6
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    La concordance du nombre d'octets entre les types entre les compilateurs C et Pascal utilisés ne dit rien sur le boutisme ou les éventuelles contraintes d'alignements qui font que certains compilateurs ajoutes des bytes supplémentaires entre deux champs d'une structure.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

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

Discussions similaires

  1. Problème de lecture avec fread qui retourne 0
    Par bru.antoine dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 25/07/2012, 17h31
  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. prblme de lecture avec fread ... etrange...
    Par toto4650 dans le forum MFC
    Réponses: 14
    Dernier message: 28/07/2005, 17h58
  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