Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ecriture dans un fichier

En mode "r+"

Sujet résolu
    23 mai 2006 à 14:57:59

    Je souhaite enregistrer les cartes de Mario Sokoban dans un fichier. Or rien ne se passe, voici le code :
    bool sauvegarderNiveau(int carte[][NOMBRE_BLOCS_HAUTEUR], int indice)
    {

    //---OUVERTURE DU FICHIER NIVEAUX.LVL---//

        FILE* fichier = fopen("Niveaux.lvl", "r+");
        if (fichier == NULL)
        {
                    return false;
        }

    //---ECRITURE DE LA CARTE DANS LE FICHIER---//

            int     i = 0,
                            j = 0;
            char    ligneFichier[NOMBRE_BLOCS_LARGEUR * NOMBRE_BLOCS_HAUTEUR + 1] = {0};

            while (i < indice)
            {
                    fgets(ligneFichier, NOMBRE_BLOCS_LARGEUR * NOMBRE_BLOCS_HAUTEUR + 2, fichier);
                    i++;
            }
           
            i = 0;
            while (i < NOMBRE_BLOCS_HAUTEUR)
            {
                    while (j < NOMBRE_BLOCS_LARGEUR)
                    {
                            fputc(carte[j][i], fichier);
                            j++;
                    }
                    j = 0;
                    i++;
            }

    //---FERMETURE DU FICHIER---//

        fclose(fichier);
        return true;
    }

    Autre question : j'utilise ici la lecture du fichier afin de déplacer le curseur à l'endroit désiré (ce qui d'ailleurs ne semble pas fonctionner...), car j'ai lu que la fonction fseek() ne fonctionnait qu'en mode binaire... N'existe-t-il aucun autre moyen pour se déplacer précisemment dans un fichier ?
    • Partager sur Facebook
    • Partager sur Twitter
      23 mai 2006 à 17:02:10

      salut chahine, je ne connais pas le c++,
      et je debute avec le c,
      mais deja je peux te dire que fseek ne pose pas tant de problemes que ca, le seul que j ai eu jusqu a present, c est si tu es sous windows.

      donc tu peux utiliser fseek si tu respecte la syntaxe yaura pas de probleme.

      si tu es sous windows, n oublie pas que la fin de ligne ce n est pas '\n' mais '\r' suivi de '\n' !!

      voila ce que je sais de fseek ;)

      autre chose : essaie de donner un chemin entier pour l ouverture du fichier, sans oublier de doubler les caracteres speciaux :

      fopen("c:\\blablablablabla\\Niveaux.lvl", "r+");

      j espere aussi que ton fichier existe deja dans le repertoire...
      essaie d ajouter quelques lignes vides.
      • Partager sur Facebook
      • Partager sur Twitter
        23 mai 2006 à 19:12:31

        Citation : Mr.BrYcE

        mais deja je peux te dire que fseek ne pose pas tant de problemes que ca, le seul que j ai eu jusqu a present, c est si tu es sous windows.


        Et bien il s'avère que je suis sous Windows, et je tiens mon information de M@téo lui-même (c'est te dire !!!) :

        Citation : M@téo

        La fonction fseek peut se comporter bizarrement sur des fichiers ouverts en mode texte. En général, on l'utilise plutôt pour se déplacer dans des fichiers ouverts en mode binaire.
        Quand on lit / écrit dans un fichier en mode texte, on le fait généralement caractère par caractère. La seule chose qu'on se permet en mode texte avec fseek c'est de revenir au début ou de se placer à la fin.


        En ce qui concerne la fin de ligne, c'est bon à savoir merci, je l'ignorais !

        Citation : Mr.BrYcE

        essaie de donner un chemin entier pour l ouverture du fichier


        Par souci de portabilité, j'ai préféré rester en chemin relatif... A moins que ça ne provoque des disfonctionnements dans le code... ?
        • Partager sur Facebook
        • Partager sur Twitter

        Ecriture dans un fichier

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown