Probleme modification fichier

gusdark Messages postés 10 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 12 janvier 2010 - 26 oct. 2006 à 00:13
gusdark Messages postés 10 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 12 janvier 2010 - 26 oct. 2006 à 13:01
salut , j'ai un probleme :
j'ai fait un code pour modifier une ligne d'un fichier :
-il copie les premieres lignes jusqu'a la ligne a modifier dans un autre fichier
-il rentre le ligne modifiéé dans le nouveau fichier a la suite
-il complete le nouveau fichier avec les lignes qui suivent dans le fichier d'origine

seul probleme , c'est que dans le nouveau fichier :
-il m'affiche les premieres lignes
-il m'affiche le ligne modifiéé
-il m'affiche la ligne d'origine qui etait a modifier
-il m'affiche les reste des lignes

j'aimerai qu'il ne m'affiche pas l'originale de la ligne a modifier dans le nouveau fichier
je sais que j'ai un probleme avec la position du curseur dans le fichier , mais des que j'ai changé des trucs dans le code source , ca faisais planter le programme et redemarrage a chaque fois
est ce que vous pourriez m'aider et me dire ce qui ne va pas plz ?
je vous montre mon code.

int sauvegarderNiveau(int niveau[][NB_BLOCS_HAUTEUR], int numeroLvl)
{
//variables
    FILE* fichier = NULL;
    FILE* fichier2 = NULL;
    int caractereLu = 0;
    char ligneFichier[NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1] = {0};
    int numeroLvl1 = numeroLvl;    int i 0, j 0, k = 0;
    fichier = fopen("niveaux.lvl", "r");
    fichier2 = fopen("niveaux2.lvl", "w+");



    if (fichier NULL || fichier2 NULL)
        return 0;



    rewind(fichier);
//affiche les premieres lignes
    while ( k < numeroLvl1)
    {
        fgets(ligneFichier, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1, fichier);
        fputs(ligneFichier,fichier2);
        caractereLu = fgetc(fichier);
        if (caractereLu == '\n')
        {
            fputs("\n",fichier2);
            k++;
        }
    }
//affiche la modification de la ligne a modifier
    for (i = 0 ; i < NB_BLOCS_HAUTEUR ; i++)
    {
        for (j = 0 ; j < NB_BLOCS_LARGEUR ; j++)
        {
            fprintf(fichier2, "%d", niveau[j][i]);
        }
    }
    fputs("\n",fichier2);
    k++;
//affiche le reste des lignes
    while(k <= 4)
    {
        fgets(ligneFichier, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1, fichier);
        fputs(ligneFichier,fichier2);
        caractereLu = fgetc(fichier);
        if (caractereLu == '\n')
        {
            fputs("\n",fichier2);
            k++;
        }
    }
    fclose(fichier2);
    fclose(fichier);
    remove("niveau.lvl");
    rename("niveau2.lvl","niveau.lvl");



    return 1;
}

2 réponses

cs_ToToL Messages postés 170 Date d'inscription vendredi 25 avril 2003 Statut Membre Dernière intervention 9 juillet 2008
26 oct. 2006 à 00:39
un simple fgets dans le vide apres le fputs de ta ligne modifié doit suffir
0
gusdark Messages postés 10 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 12 janvier 2010
26 oct. 2006 à 13:01
j'ai rajouté cette ligne :
fgets(ligneFichier, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR+1,fichier);
juste pares le fputs("\n",fichier2); de la ligne modifiée , mais ca a planté et je me retrouve avec un fichier niveau2.lvl qui prend 300 000 - 400 000 ko donc ya unn probleme et je vois pas ou........ c tres frustant.
qqn a une solution
merci quand meme a toi totol.

gusdark [:)]
0
Rejoignez-nous