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

Résolu/Fermé
oliobs Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 17 mai 2010 - Modifié par oliobs le 2/05/2010 à 20:20
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 5 mai 2010 à 08:02
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.
A voir également:

5 réponses

Urielxx Messages postés 190 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 25 juin 2013 46
Modifié par Urielxx le 2/05/2010 à 22:16
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
oliobs Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 17 mai 2010 1
2 mai 2010 à 23:29
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
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
3 mai 2010 à 10:59
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
oliobs Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 17 mai 2010 1
3 mai 2010 à 11:45
Mais on peut n'écraser qu'une partie de ces octets ?

Pour ça, fwrite à l'endroit où je veux écrire suffit non ?
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
3 mai 2010 à 12:14
oui, bien sur.
0
oliobs Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 17 mai 2010 1
3 mai 2010 à 13:55
Alors je ne comprends pas mon erreur ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Urielxx Messages postés 190 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 25 juin 2013 46
3 mai 2010 à 22:25
Tu fais bien un flush() ou un close() de ton fichier pour etre sur que l'ecriture est bien effectuée ?

0
oliobs Messages postés 16 Date d'inscription lundi 21 décembre 2009 Statut Membre Dernière intervention 17 mai 2010 1
4 mai 2010 à 11:21
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
Urielxx Messages postés 190 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 25 juin 2013 46
4 mai 2010 à 22:16
Oui, ouvre la en "a", fait un rewind(), et tun seek() ensuite.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
5 mai 2010 à 08:02
ou ouvre en w+
0