Probleme dans une ecriture de fichier

Résolu
hisoka56 Messages postés 17 Date d'inscription lundi 7 juillet 2003 Statut Membre Dernière intervention 22 juillet 2008 - 2 août 2006 à 23:45
hisoka56 Messages postés 17 Date d'inscription lundi 7 juillet 2003 Statut Membre Dernière intervention 22 juillet 2008 - 3 août 2006 à 17:22
bon salut a tous, j'ai un petit probleme d'ecriture dans un fichier dans uen fonction qui permet de sauvegarder un niveau


voila le fichier de niveaux est de cette forme:


le tag [level] sert de separateur de niveau et les informations apres concerne ce dont j'ai besoin pour jouer.

[level]


1


test.mp3


10101010101010101010


01010101010101010101


11111111111111111111


00010001000100010001


10010010010010010010


10001110111000100011


00000000000000000000


00000000000000000000


00000000000000000000


00000000000000000000


[level]


2


test.mp3


00000000000000000000


01010101010101010101


11111111111111111111


00010001000100010001


10010010010010010010


10001110111000100011


00000000000000000000


00000000000000000000


00000000000000000000


00000000000000000000


et ma fonction pour sauvegarder le niveau a en faite 2 fonction, si le
niveau n'existe pas, elle l'ecrit a la fin du fichier, cette fonction
marche bien mais l'autre partie (si le niveau existe, elle devrait le
remplacer par celui en cours et ca ne marche pas)


pourtant en principe, mon pointeur est bien positionné et devrait ecrire par dessus le texte deja existant.

Code : C++

int Level::sauvegarder(int level)
{


        FILE* fichier=NULL;

        char chaineCourante[LIGNE_MAX]="";

        int lvl=-1;

        int ligne=0;

        char *trouve;

        int bon=0;


        fichier = fopen("niveaux.bbg", "r+");

        if(fichier == NULL)return0;


        while(fgets(chaineCourante, LIGNE_MAX, fichier) != NULL && !bon)

        {

                ligne++;

                // On cherche l'occurence du seperateur de level

                trouve = strstr(chaineCourante, "[level]");

                if(trouve != NULL)//on a trouve un level

                {

                        lvl= atoi(fgets(chaineCourante, LIGNE_MAX, fichier));

                        if(lvl == level)//on a trouve le bon level

                                bon=1;

                }

        }

        //ecriture du level...

        if(!bon)//si on n'a pas trouvé le level

                fprintf(fichier, "[level]\n%d\n",level);

        fprintf(fichier, "%s", musique);

        for(int i=0; i<10; i++)

        {

                for(int j=0; j<20; j++)

                        fprintf(fichier, "%d",brick[j][i]);

                fprintf(fichier, "\n");

        }

        fclose(fichier);

        return1;
}


si je fais un niveau.sauvegarder(4); le programme va correctement ecrire le niveau 4


mais si je fais un niveau.sauvegarder(2), il ne remplace pas le niveau2 actuel par celui que je veux.

ps: il manquerait une fonction code dans ce forum (ou alors j'ai pas bien regardé)

4 réponses

hisoka56 Messages postés 17 Date d'inscription lundi 7 juillet 2003 Statut Membre Dernière intervention 22 juillet 2008 1
3 août 2006 à 17:22
bon finalement j'ai reussi a corriger ca en passant par une methode differente
si le niveau existe deja, je passe par un fichier temporaire dans lequel je copi tout avant le dit level, le level qui je veu sauvegarder et la fin du fichier, et meme si c'est pas comme je voulais le faire au debut ca marche et comme j'aurai je pense pas plus d'une 20aine de level, ca prend aps trop de temps
en tout cas merci pour vos reponse.


sinon c'etait fait expres pour le bon, en effet si bon=1, alors le marqueur se trouvait a la bonne position et il me restait plus qu'a ecrire le level (meme si maintenant je ne fais plus comme ca)
3
bilaloch Messages postés 556 Date d'inscription lundi 6 octobre 2003 Statut Membre Dernière intervention 31 octobre 2019 1
3 août 2006 à 13:23
Salut,

Que se passe t'il lorsqu'il existe deja ? Il l'enregistre a la fin ?

BILALoch
0
gerald3d Messages postés 5 Date d'inscription jeudi 3 août 2006 Statut Membre Dernière intervention 2 octobre 2006
3 août 2006 à 15:18
A la fin tu testes la valeur de "bon". Le problème est que si "bon" est vrai, tu écris quand même la musique et les données à la suite du fichier. Il faudrait je pense récupérer la position où tu désires écraser les données avec ftell(); par exemple pour ensuite te placer au bon endroit avec fseek(); pour écrire tes données.
0
gerald3d Messages postés 5 Date d'inscription jeudi 3 août 2006 Statut Membre Dernière intervention 2 octobre 2006
3 août 2006 à 15:18
A la fin tu testes la valeur de "bon". Le problème est que si "bon" est vrai, tu écris quand même la musique et les données à la suite du fichier. Il faudrait je pense récupérer la position où tu désires écraser les données avec ftell(); par exemple pour ensuite te placer au bon endroit avec fseek(); pour écrire tes données.
0
Rejoignez-nous