IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème avec fonction fopen


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 79
    Par défaut Problème avec fonction fopen
    Bonjour,

    voilà j'ai un petit problème, voici ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    void ecriture(char* chemin_src,int name) {
        char chemin_dest[100];
        char c;
     
        sprintf(chemin_dest,"spool%d",name);
        FILE * fichier_src = fopen(chemin_src,"r");
        FILE * fichier_dest = fopen(chemin_dest,"w");
        c = fgetc(fichier_src);
        while (c != EOF) {
          fprintf(fichier_dest,"%c",c);
          c = fgetc(fichier_src);
        }
     
      fclose(fichier_dest);
      fclose(fichier_src);
    }
    Cette fonction fonctionne bien, mon problème et que je souhaiterai, associer comme chemin de mon fichier de destination, un chemin du genre "spool/4" plutôt que "spool4" dans le dossier courant.

    Hélas, apparement le fichier est bien associé mais au moment du "fprintf(fichier_dest,"%c",c);" cela plante et j'ai une erreur de segmentation, cela vient apparement des "/" dans le chemin d'accés au fichier.

    Merci d'avance poru votre aide

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par allezlolo Voir le message
    Bonjour,

    voilà j'ai un petit problème, voici ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    void ecriture(char* chemin_src,int name) {
        char chemin_dest[100];
        char c;
     
        sprintf(chemin_dest,"spool%d",name);
        FILE * fichier_src = fopen(chemin_src,"r");
        FILE * fichier_dest = fopen(chemin_dest,"w");
        c = fgetc(fichier_src);
        while (c != EOF) {
          fprintf(fichier_dest,"%c",c);
          c = fgetc(fichier_src);
        }
     
      fclose(fichier_dest);
      fclose(fichier_src);
    }
    Cette fonction fonctionne bien, mon problème et que je souhaiterai, associer comme chemin de mon fichier de destination, un chemin du genre "spool/4" plutôt que "spool4" dans le dossier courant.

    Hélas, apparement le fichier est bien associé mais au moment du "fprintf(fichier_dest,"%c",c);" cela plante et j'ai une erreur de segmentation, cela vient apparement des "/" dans le chemin d'accés au fichier.

    Merci d'avance pour votre aide
    Ton code n'est pas sécurisé. En effet, toute ouverture de fichier peut échouer. Il faut donc être certain de la valeur rétournée avant de l'utiliser. NULL signifie erreur d'ouverture.

    Il est donc probable que le fichier (ou chemin) "spool/4" n'existe pas...

    D'autre part, EOF est de type int. c doit donc impérativement être de type int.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    #include <stdio.h>
    void ecriture (char const *chemin_src, int name)
    {
       char chemin_dest[100];
     
       sprintf (chemin_dest, "spool%d", name);
       FILE *fichier_src = fopen (chemin_src, "r");
       if (fichier_src != NULL)
       {
          FILE *fichier_dest = fopen (chemin_dest, "w");
          if (fichier_dest != NULL)
          {
             int c;
             while ((c = fgetc (fichier_src)) != EOF)
             {
                fprintf (fichier_dest, "%c", c);
     
             }
     
             fclose (fichier_dest);
          }
          else
          {
             perror (chemin_dest);
          }
          fclose (fichier_src);
       }
       else
       {
          perror (chemin_src);
       }
    }
     
    int main (void)
    {
       ecriture ("spool", 4);
     
       return 0;
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 79
    Par défaut
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probléme avec UTL_FILE.FOPEN
    Par elflamby dans le forum Oracle
    Réponses: 4
    Dernier message: 24/01/2006, 11h45
  2. Problème avec fonction
    Par Goundy dans le forum C
    Réponses: 24
    Dernier message: 01/10/2005, 20h17
  3. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo