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 lecture fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Par défaut Problème lecture fichier
    Bonjour, j'ai créé un fichier pour un logiciel. J'enregistre dedans un entier et deux doubles de la facon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    fileP = fopen(cleanDir, "r+b");
     
        fseek(fileP, 0, SEEK_END);
     
        fwrite(&mainWindow.actualShape, sizeof(int), 1, fileP);
        fwrite(&X, sizeof(double), 1, fileP);
        fwrite(&Y, sizeof(double), 1, fileP);
     
        fclose(fileP);
    (Je vous ai enlevé toutes les vérifications pour que ca soit plus clair ;D)

    Ensuite j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while(fread(&fileShape.idShape, sizeof(int), 1, fileP), feof(fileP) != 0){
       if(fileShape.idShape == 11){
          fread(&fileShape.x, sizeof(double), 1, fileP);
          fread(&fileShape.y, sizeof(double), 1, fileP);
          gdk_draw_rectangle (widget->window,
          widget->style->black_gc,
          TRUE,
          fileShape.x, fileShape.y,
          200,
          200);
       }
    }
    J'arrive bien à récupérer mon entier mais les valeurs des doubles sont incorrectes, je récupère 0 et 0.

    Quelqu'un aurait une idée ?

    Merci bien !

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 806
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 806
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Kintoki Voir le message
    J'arrive bien à récupérer mon entier mais les valeurs des doubles sont incorrectes, je récupère 0 et 0.

    Quelqu'un aurait une idée ?
    Bonjour

    Je suis embêté par ton fseek(). Pourquoi tu te places systématiquement à la fin du fichier ?
    Corollaire: si c'est vraiment utile, n'aurais-tu alors pas avantage à ouvrir ton fichier en mode "a+b" (toute écriture se fait alors automatiquement à la fin) ?

    Sinon tu ouvres ton fichiier en "r+" donc cela signifie que tu mélanges des opérations de lecture et d'écriture dans le même FILE*. Tu es alors obligé
    • chaque fois que tu écris, de faire un fflush() ou alors un repositionnement via fseek() ou rewind() si tu veux ensuite écrire (cependant inutile avec le mode "a" vu que le positionnement en EOF est automatique)
    • chaque fois que tu lis, de faire là aussi un repositionnement via fseek() ou rewind() si tu veux ensuite écrire (sauf si la lecture a échoué)

    Et surtout si tu bosses sous Windows (et le "b" dans ton mode d'ouverture laisse penser que c'est le cas). J''ai appris ça tout récemment ici

    D'autre part, le feof() est inutile puisqu'un while(read(...)) bouclera tant que la lecture est faisable.

    De mon coté, j'ai tapé ces petits codes
    Ecriture
    Code c : 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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
    	int i;
    	double X;
    	double Y;
    	FILE *fileP;
    	fileP = fopen("ttt", "rb");
    	printf("file=%p\n", fileP);
     
    	fwrite(&i, sizeof(int), 1, fileP);
    	fwrite(&X, sizeof(double), 1, fileP);
    	fwrite(&Y, sizeof(double), 1, fileP);
    	fclose(fileP);
    }

    lecture
    Code c : 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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
    	int i;
    	double X;
    	double Y;
    	FILE *fileP;
    	fileP = fopen("ttt", "rb");
    	printf("file=%p\n", fileP);
     
    	fread(&i, sizeof(int), 1, fileP);
    	fread(&X, sizeof(double), 1, fileP);
    	fread(&Y, sizeof(double), 1, fileP);
    	printf("i=%d\n", i);
    	printf("X=%f\n", X);
    	printf("Y=%f\n", Y);
     
    	fclose(fileP);
    }

    Et le tout fonctionne sans soucis...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 10
    Par défaut
    Merci beaucoup Sve@r pour ta réactivité !

    J'ai cependant résolu mon problème entre temps, c'était vraiment très bête, mais je vis également tenter avec le tiens, je m'endormirais moins con !
    Sur ce merci encore et bonne journée !!

Discussions similaires

  1. [VB.NET]Problème lecture fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/05/2006, 16h05
  2. Problème Lecture fichier
    Par Gebudi. dans le forum C++
    Réponses: 1
    Dernier message: 29/05/2006, 08h37
  3. problème lecture fichier
    Par Pleymo dans le forum Langage
    Réponses: 2
    Dernier message: 23/11/2005, 09h00
  4. [SAX] Problème lecture fichier xml
    Par BernardT dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 07/07/2005, 18h11
  5. Problème lecture fichier en C++
    Par cali1983 dans le forum C++
    Réponses: 17
    Dernier message: 20/05/2005, 09h36

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