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 :

fopen probleme d ouverture


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 3
    Par défaut fopen probleme d ouverture
    bonjour tout le monde,
    je galere sur mon tout petit code depuis deux jours a cause de cette fonction que je n arrive pas a faire marcher.
    voici le topo
    tout d abord j ouvre un fichier : "../list_test.txt"; la fopen marche.
    ce fichier contient une liste de fichier que je dois ouvrir successivement, et c est la que ca ne marche plus:le plus bisard c est que fopen marche juste pour la derniere iteration du while.

    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
       char * p1= malloc(17 );
       p1="../list_test.txt";
       FILE *f = fopen( p1, "rt" ); /* ouvre en lecture */
     
       if (f==NULL) {
         printf("erreur ouverture\n");
         return 1;        /* sort du programme (code erreur 1) */
       }
     
       while ( fgets( line, 256, f ) != NULL)  /* essai lecture ligne */
             { 
                 char test[]="../test1/" ;
                 char * path = malloc(strlen(test)+ strlen(line) + 1 );
                 strcpy(path,test);
                 strcat(path,line);  /*je fais une concatenation pour avoir la bonne           adresse*/
     
                 printf("path : %s\n",path); /*je verifie l adresse et c est  la                             bonne!*/
     
     
                FILE *k = fopen(path,"rt" ); /* ouvre en lecture */
               if (k==NULL) {
                printf("erreur ouverture: %s\n",path);
                return 1;
                }
                if (k!=NULL) {
                printf("ouverture: %s\n",path);
                fclose(k);
                }
                 free(path);
     
               } 
     
     
       fclose(f);
         system("PAUSE");	
      return 0;
    j espere que qq pourra m aider
    merci

  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 drevlav
    je galere sur mon tout petit code depuis deux jours a cause de cette fonction que je n arrive pas a faire marcher.
    voici le topo
    tout d abord j ouvre un fichier : "../list_test.txt"; la fopen marche.
    ce fichier contient une liste de fichier que je dois ouvrir successivement, et c est la que ca ne marche plus:le plus bisard c est que fopen marche juste pour la derniere iteration du while.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       char *p1 = malloc (17);
       p1 = "../list_test.txt";
    Ceci n'a aucun sens. En effet, tu alloues un bloc mémoire et tu perds son adresse en modifiant une deuxième fois le pointeur. Pour faire une copie de chaine, on utilise strcpy().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       char *p1 = malloc (17);
       if (p1 != NULL)
       {
          strcpy (p1, "../list_test.txt");
     
          /* usage... */
     
          free (p1);
       }
    Mais n'est-ce pas une façon compliquée d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       char const *p1 = "../list_test.txt";
    Au fait, 'p1' est un identificateur horrible pour un nom de fichier... Pourquoi pas 'fname', 'ficname', 'nomfic' etc. Il est important de bien choisir les identificateurs :
    • Ca montre qu'on maitrise son sujet
    • Ca permet une maintenance aisée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       FILE *f = fopen (p1, "rt");  /* ouvre en lecture */
    Est incorrect. "rt" n'est pas standard. C'est une extension (peu utile) de Borland C. Utiliser la forme standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       FILE *f = fopen (p1, "r");  /* ouvre en lecture */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       while (fgets (line, 256, f) != NULL) /* essai lecture ligne */
    est très laid. line n'est pas défini, et la taille est en dur. Préférer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          char line[256];
          while (fgets (line, sizeof line, f) != NULL) /* essai lecture ligne */
    BUG Ensuite, garder en mémoire que fgets() prends le '\n'. Il faut donc commencer par l'éliminer proprement.

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers

    Je te laisse continuer...

Discussions similaires

  1. probleme d'ouverture de requette
    Par ghita269 dans le forum ASP
    Réponses: 4
    Dernier message: 29/12/2005, 10h37
  2. Probleme d'ouverture de disquette
    Par rika dans le forum Périphériques
    Réponses: 4
    Dernier message: 28/11/2005, 16h29
  3. Probleme d'ouverture d'une BD Access !!!
    Par realmadrid dans le forum Access
    Réponses: 7
    Dernier message: 07/10/2005, 15h19
  4. [visual c++]Probleme d'ouverture de solution
    Par dje41 dans le forum MFC
    Réponses: 2
    Dernier message: 12/04/2005, 11h41
  5. Probleme d'ouverture de formulaire
    Par nemesys971 dans le forum IHM
    Réponses: 11
    Dernier message: 01/02/2005, 15h08

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