Eviter les répétitions de : fopen
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Eviter les répétitions de : fopen



  1. #1
    AmigaOS

    Eviter les répétitions de : fopen


    ------

    Bonjour

    Je cherche à créé un programme en C qui me créé 1000 fichiers .BMP.
    Pour l’instant je sais faire :
    Code:
    fichier = fopen ("image001.bmp", "ab") ;  …….  fclose (fichier) ;
    fichier = fopen ("image002.bmp", "ab") ;  …….  fclose (fichier) ;
    fichier = fopen ("image003.bmp", "ab") ;  …….  fclose (fichier) ;
    fichier = fopen ("image004.bmp", "ab") ;  …….  fclose (fichier) ;
    fichier = fopen ("image005.bmp", "ab") ;  …….  fclose (fichier) ;
    …….
    …….
    Mais je ne vais pas non plus l’écrire 1000 fois.
    Je demande donc comment le faire plus simplement ?

    Merci

    -----
    Dernière modification par AmigaOS ; 04/08/2012 à 23h54.

  2. #2
    polo974

    Re : Eviter les répétitions de : fopen

    comme ça ressemble à du C:

    emballer tout ça dans un :
    int i;
    for(i = 0; i<1000; i++) /* de 0 à 999 */
    {
    ....
    }

    ensuite il y a sprintf qui permet d'écrire dans une chaine, donc
    char nomfich[64];
    sprintf(nomfich,"image%03d.bmp ",i)

    et utiliser la variable nomfich dans le fopen:
    f=fopen(nomfich,...)

    comme ce sont les structure de contrôle et les fonctions de base, je te conseille de compulser la doc et les tutoriaux dispos sur le web ou le papier (si, si, ça existe encore...).
    Jusqu'ici tout va bien...

  3. #3
    Zartan

    Re : Eviter les répétitions de : fopen

    Ce n'était pas la question mais "ab" ça me parait bizarre pour écrire un fichier bmp, parce que si le fichier existe déjà, au lieu de l'effacer ça va ajouter des données à la fin.

  4. #4
    AmigaOS

    Re : Eviter les répétitions de : fopen

    Enfaite ce qui me pose problème est juste l'ouverture et la fermeture avec fopen et fclose. Les fichiers ne sont pas ouvert en même temps, donc pour l’écriture pas de problème.
    Pour "ab" c'est ok. Les fichiers n'existent pas au début du programme, mais avec "ab" ils sont créé. Et puis j’écris les octets à la ceuleuleu à la fin du fichier.


    J'aimerai faire un espèce de ça, qui ne fonctionne bien-sur pas :

    FILE* fichier = NULL ; // Une seul fois


    for (i=0 ; i<1000 ; i++)
    {
    fichier = fopen ("image[i].bmp", "ab") ;

    // Écriture
    // Écriture
    // Écriture

    fclose (fichier) ;
    }

    (J'utilise pas la balise CODE parce-que c'est tout petit et on voit rien.)

  5. A voir en vidéo sur Futura
  6. #5
    PA5CAL

    Re : Eviter les répétitions de : fopen

    Bonjour

    polo974 a déjà donné la réponse: à chaque itération, utilise sprintf(...) pour créer le nom de fichier avant de l'utiliser dans fopen(...) .


    Quant à la lisibité du code, elle est normalement bien meilleure avec les balises [CODE], qui conservent l'indentation et utilisent un police adaptée. Pense d'abord à ceux qui te lisent : si ça apparaît tout petit chez toi, ce n'est généralement pas le cas chez les autres (chez moi notamment). Par ailleurs ton navigateur n'aura certainement aucun mal à grossir le texte.
    Dernière modification par PA5CAL ; 05/08/2012 à 15h48.

  7. #6
    Jack
    Modérateur

    Re : Eviter les répétitions de : fopen

    Pour "ab" c'est ok. Les fichiers n'existent pas au début du programme, mais avec "ab" ils sont créé.
    Ça nuit clairement à la lisibilité du code. Celui qui passe derrière un code comme celui-là va immanquablement se poser des questions inutiles. Si le nouveau fichier doit être crée à chaque fois, il faut utiliser wb et pas ab.

    A+
    Dernière modification par Jack ; 05/08/2012 à 15h58.

  8. #7
    AmigaOS

    Re : Eviter les répétitions de : fopen

    A oui, excusez moi, j'avais pas compris le sens du code.
    Ça fonctionne maintenant :

    Code:
    char Nomfich[7] ;
    
    for (NBimgs=0 ; NBimgs<NBimax ; NBimgs++)
    {
              sprintf (Nomfich, "Img%d.bmp", NBimgs+1);
              fichier = fopen (Nfich,"ab") ;
              ......................
              fclose (fichier) ;
    }
    Merci

  9. #8
    PA5CAL

    Re : Eviter les répétitions de : fopen

    Deux erreurs :
    Code:
    char Nomfich[7] ;   <------
    
    for (NBimgs=0 ; NBimgs<NBimax ; NBimgs++)
    {
              sprintf (Nomfich, "Img%d.bmp", NBimgs+1);
              fichier = fopen (Nfich,"ab") ;   <------
              ......................
              fclose (fichier) ;
    - augmenter la taille de Nomfich afin de réserver l'espace nécessaire au nom de fichier le plus long, en incluant son zéro terminal. Par exemple, pour NBimax≤999 (numéro de fichier de un à trois chiffres), il faut prévoir au moins Nomfich[12].

    - remplacer Nfich par Nomfich.
    Dernière modification par PA5CAL ; 09/08/2012 à 00h57.

Discussions similaires

  1. probleme avec fopen()
    Par invitec4114293 dans le forum Programmation et langages, Algorithmique
    Réponses: 11
    Dernier message: 23/01/2011, 19h04
  2. p-listes sans répétitions.
    Par neokiller007 dans le forum Mathématiques du collège et du lycée
    Réponses: 5
    Dernier message: 06/05/2008, 09h18