[c] Problème d'écriture dans un fichier

Résolu
oliobs Messages postés 17 Statut Membre -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour/Bonsoir,

Je suis étudiant en première informatique de gestion et dans une semaine, je dois rendre mon projet de fin d'année. Qui consiste à créer un logiciel en langage C permettant de réaliser la gestion d'une base de données de jeux/joueurs/parties jouées
(chacune ayant un mode de gestion différent, mais la n'est pas le problème )

La Première table "JEUX" est indexée , j'ai donc une autre Table "INDEX_JEUX" qui est chargée en mémoire, contrairement à la table "JEUX" qui reste bien au chaud dans le fichier.

Mon soucis, le voici : Lorsque je veux ajouter un jeux, je me rends dans l'index et regarde où il y a un emplacement libre dans la table "JEUX" (l'index me fournit l'offset jusqu'à l'emplacement "libre").

Pour me rendre à l'endroit indiqué dans le fichier, dois-je faire un fseek ou existe-t-il une autre fonction?
Une fois que mon pointeur se trouve à l'endroit souhaité dans le fichier, comment remplacer ce qui existe déjà à cet endroit, par ce que je veux y insérer (le tout étant stocké dans une structure"temporaire") ?

Merci d'avance !

PS: Voici mon code , pour ceux qui le souhaite : http://pastebin.com/JBeFfLDA
la fonction 'incriminée est la fonction ecrire_fichier_jeux , située après AJOUT_JEU



Have Fun .
Oliobs.

5 réponses

  1. Urielxx Messages postés 223 Statut Membre 46
     
    Tu as déjà bien avancé !

    Le fseek() te permet en effet de te positionner à l'endroit qui va bien dans le fichier (fsetpos() permet p-etre aussi de le faire). Ensuite, il suffit d'un fwrite() pour écrire tes données. Ou est ton problème ?
    Merci de +1 les messages utiles et de marquer vos questions résolues dès que possible.
    1
  2. oliobs Messages postés 17 Statut Membre 1
     
    Eh bien, c'est ce que j'ai fais ...

    Pour la table joueurs tout se passe normalement, les joueurs sont toujours la lorsque je redémarre le programme.

    Mais pour l'index et les jeux , rien ne s'inscrit dans les fichiers ( Je pense que le problème vient de la )

    J'ai un peu avancé .. http://pastebin.com/PB7c0FZt
    0
  3. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    Attention, lorsque tu parle de fichier et d'insertion. Un fichier c'est une suite linéaire de valeurs, il n'y a pas de notion de ligne. Tu ne peut pas insérer quelque chose dans un fichier, juste écraser ce qui y ait déjà (éventuellement des octets nuls).
    0
  4. oliobs Messages postés 17 Statut Membre 1
     
    Mais on peut n'écraser qu'une partie de ces octets ?

    Pour ça, fwrite à l'endroit où je veux écrire suffit non ?
    0
    1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      oui, bien sur.
      0
    2. oliobs Messages postés 17 Statut Membre 1
       
      Alors je ne comprends pas mon erreur ...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Urielxx Messages postés 223 Statut Membre 46
     
    Tu fais bien un flush() ou un close() de ton fichier pour etre sur que l'ecriture est bien effectuée ?

    0
    1. oliobs Messages postés 17 Statut Membre 1
       
      Oui, je pense que le problème vient du mode d'ouverture, je l'ouvre en "wb" donc tout est supprimé une fois ouvert..
      0
    2. Urielxx Messages postés 223 Statut Membre 46
       
      Oui, ouvre la en "a", fait un rewind(), et tun seek() ensuite.
      0
    3. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      ou ouvre en w+
      0