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 :

Bug d'écriture dans un fichier texte.


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par défaut Bug d'écriture dans un fichier texte.
    Bonjour,

    Je travaille sous Windows XP, Visual Studio 2005, et accessoirement wordpad.

    J'ai un bug assez étrange d'écriture dans les fichiers. J'utilise un petite fonction toute bête pour écrire dans un fichier 8, 16 ou 32 bits :

    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
     
    void put (uint32_t value, FILE* outf, uint8_t len)
    {
      switch (len) {
    	case 8:
    		fputc(value & 0xff,outf);
    		break;
    	case 16:
    	    fputc(value & 0xff,outf);
    		fputc((value >>  8) & 0xff,outf);
    		break;
    	case 32:
    		fputc(value & 0xff,outf);
    		fputc((value >>  8) & 0xff,outf);
    		fputc((value >> 16) & 0xff,outf);
    		fputc((value >> 24) & 0xff,outf); 
    		break;
    		}
    }
    Je lui passe soit un caractère, soit un nombre de 8 bits en entrée (j'ai vérifié même si bien sûr le code accepte jusqu'à 32 bits, il ne reçoit jamais de nombres de plus de 8 bits.) et je passe 8 en second argument. Bien sûr j'aurais pu éviter de mettre un second argument, mais j'utilise aussi cette fonction pour enregistrer mes images 32 bits et 16 bits en BMP. Dans le cas de mon bug, la fonction d'enregistrement d'image a été totalement supprimée du code pour être sûr que ça n'en est pas la source.

    Ma fonction principale est découpée en deux parties, l'une qui gère les touches claviers à partir de la bibliothèque SDL, une autre qui gère les touches souris également à partir de SDL. J'ai vérifié en débuggage, il ne semble pas y avoir d'erreur dessus. Seules les touches souris provoquent un enregistrement, les touches clavier ne font jamais appelle à put. Les touches souris font appel à put pour enregistrer les coordonnées où j'ai cliqué et diverses informations sur l'image dans ces coordonnées.

    Or si j'appuie sur une touche clavier, quelqu'elle soit, il enregistre toujours mes clics de souris, mais le clic suivant, il ne l'enregistre plus en ASCII, mais en quelque chose de... bizarre (je joins le résultat). Autant dire que mon fichier texte devient illisible.

    Si quelqu'un a une idée d'où peut venir le problème, et de comment le résoudre...

    EDIT : j'ai l'impression d'ailleurs qu'il y a des messages mytérieux dans les zones où ça part en vrille...
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par défaut
    Personne n'a d'idée vraiment ?

    Même pas une petite piste de recherche du bug, où un conseil de changement de bibliothèque ou de fonction ?

    EDIT : j'ai fait pas mal de tests. Au niveau de la déclaration je déclare mon fichier ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char     gFileBuffer[1024];
    f = fopen ("savedFile.txt", "wb");
    setvbuf(f,gFileBuffer,_IOFBF, 1024);
    Peut être que l'erreur est dans ces quelques lignes. En tout cas, en remplaçant 1024 par 10240, j'ai la même erreur, mais pas au même endroit dans le fichier texte. Plus le nombre est grand, plus mon bug se situe au début du fichier texte.

    En débuggage, j'ai remarqué également que dans _ptr était stocké la valeur
    "?C>1
    " après appui sur une touche, toujours alors qu'aucun appel à mon fichier f n'a été fait.

  3. #3
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Si personne n'a repondu, c'est certainement que le problème que tu décris est mal expliqué ou que le code que tu envois n'est pas suffisant pour voir d'où vient le bug.
    Envois nous un code minimal et compilable et on verra ce qu'on peut faire pour toi...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par défaut
    Mouinnnn. Quand je mets un code minimal bien sûr ça marche. Et faire entre le minimal et le code complet, j'y arrive pas En fait quand j'affiche l'image, j'ai le bug, quand je l'affiche pas, je l'ai pas. Mais pour l'affichage de l'image, j'utilise une librairie que je ne peux pas mettre sur le net, qui n'est absolument pas GNU. Ce qui veut dire qu'il faut que je traduise tout dans une bibliothèque GNU... Et donc que tant que c'est pas fait, vous ne pouvez pas m'aider.

    Bon, je crois que je vais tenter de trouver dans le coin, un programmeur qui s'ennuie...

    EDIT : Après encore quelques tests, j'ai bien l'impression que le bug est aussi lié à la bibliothèque graphique que j'utilise mais pourquoi...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par défaut
    J'ai trouvé !

    Il ne fallait pas de setvbuf...

    EDIT : j'ai réédité mon texte précédent, j'y racontais n'importe quoi, et la modif ne faisait qu'empirer les choses... Désolé pour ceux qui l'ont lu.

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

Discussions similaires

  1. écriture dans un fichier texte
    Par fstrobel dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/11/2007, 09h09
  2. [Système] Écriture dans un fichier texte
    Par sparil dans le forum Langage
    Réponses: 7
    Dernier message: 21/06/2007, 00h02
  3. lecture/écriture dans un fichier texte
    Par the watcher dans le forum Delphi
    Réponses: 23
    Dernier message: 15/05/2007, 10h57
  4. Réponses: 4
    Dernier message: 02/05/2007, 10h41
  5. Erreur E/S 32 lors de l'écriture dans un fichier text.
    Par yosthegost dans le forum Delphi
    Réponses: 6
    Dernier message: 01/06/2006, 11h45

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