Probleme dans une ecriture de fichier

[Résolu]
Signaler
Messages postés
17
Date d'inscription
lundi 7 juillet 2003
Statut
Membre
Dernière intervention
22 juillet 2008
-
Messages postés
17
Date d'inscription
lundi 7 juillet 2003
Statut
Membre
Dernière intervention
22 juillet 2008
-
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

Messages postés
17
Date d'inscription
lundi 7 juillet 2003
Statut
Membre
Dernière intervention
22 juillet 2008
1
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)
Messages postés
556
Date d'inscription
lundi 6 octobre 2003
Statut
Membre
Dernière intervention
31 octobre 2019

Salut,

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

BILALoch
Messages postés
5
Date d'inscription
jeudi 3 août 2006
Statut
Membre
Dernière intervention
2 octobre 2006

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.
Messages postés
5
Date d'inscription
jeudi 3 août 2006
Statut
Membre
Dernière intervention
2 octobre 2006

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.