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 :

ouverture de fichier


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 102
    Points : 42
    Points
    42
    Par défaut ouverture de fichier
    bonjours a tous

    mon probleme est le suivant

    j'aimerais avoir une variable de type chainee exemple:
    char nomdefichier;

    cette variable sera saisi par l'utilisateur

    mon probleme etant que je voudrais selon le choix de l'utilisateur
    ouvrir le fichier qu'il demande

    exemple ma variable
    nomdefichier="dessin"

    j' aimerais faire un truc du genre
    fp=fopen("jeu/acces/"nomdefichier"","r");
    il faut que j'ouvre

    fp=fopen("jeu/acces/dessin","r");

  2. #2
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    Si j'ai bien compris tu veux concaténer le nom du fichier donné par l'utilisateur au chemin d'accès défini en dur ? strcat devrait faire ton affaire.

    Exemple non testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <stdlib.h>
    #include <string.h>
     
    FILE* ouvrir(char* user_file)
    {
      char filename[FILENAME_MAX] = "jeu/acces/";
      strcat(filename, user_file);
      return(fopen(filename, "r"));
    }

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Je vois pas de problème, si j'ai bien compris, tu demande à l'utilisateur de saisir un chemin d'un fichier que ton programme doit ouvrir c'est ca ?

    Si c'est ca, bin tu possède alors un tableau de taille suffisante pour contenir la chaîne, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char chemin [100] /* ou plus c'est toi qui vois */
    Pour récupérer la saisie utilisateur, il te suffit d'utiliser la fonction fgets en prennant le soin, une fois la récupération de faite, de virer le '\n' s'il existe en fin de chaîne et tu le remplaces alors par un '\0' !

    La saisie tu la récupère depuis le flux stdin !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    j'ai essayer vos methodes mais ca ne marche pas

    quelqu'un aurait'il une autre solution

  5. #5
    Membre émérite
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Points : 2 677
    Points
    2 677
    Par défaut
    Si tu nous montrais ton code l'aide arriverai plus vite je pense

  6. #6
    Membre éprouvé Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Points : 969
    Points
    969
    Par défaut
    j'ai essayer vos methodes mais ca ne marche pas
    Pas d'autre solution tu veux concaténer 2 chaines de caractères
    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
    #include <iostream.h> 
          #include <string.h> 
     
          void main() 
          { 
             char* fin = "le C++"; 
             char debut1[100]; 
             char debut2[100]; 
             strcpy(debut1, "On aime bien "); 
             strcpy(debut2, "On n'aime pas "); 
     
             strcat(debut2, fin); 
     
             cout << debut1 << endl; 
             cout << debut2 << endl;
    }

  7. #7
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par Jérémy Lefevre
    Pas d'autre solution tu veux concaténer 2 chaines de caractères
    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
    #include <iostream.h> 
          #include <string.h> 
     
          void main() 
          { 
             char* fin = "le C++"; 
             char debut1[100]; 
             char debut2[100]; 
             strcpy(debut1, "On aime bien "); 
             strcpy(debut2, "On n'aime pas "); 
     
             strcat(debut2, fin); 
     
             cout << debut1 << endl; 
             cout << debut2 << endl;
    }
    Nous sommes dans un forum sur le langage C.
    Le forum C++, c'est à côté.

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jérémy Lefevre
    Pas d'autre solution tu veux concaténer 2 chaines de caractères
    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
    #include <iostream.h> 
          #include <string.h> 
     
          void main() 
          { 
             char* fin = "le C++"; 
             char debut1[100]; 
             char debut2[100]; 
             strcpy(debut1, "On aime bien "); 
             strcpy(debut2, "On n'aime pas "); 
     
             strcat(debut2, fin); 
     
             cout << debut1 << endl; 
             cout << debut2 << endl;
    }
    Pas du C...

    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
     
      #include <stdio.h>
      #include <stdlib.h> 
      #include <string.h> 
     
    int main( void ) 
          { 
             char* fin = "le C++"; 
             char debut1[100]; 
             char debut2[100]; 
             strcpy(debut1, "On aime bien "); 
             strcpy(debut2, "On n'aime pas "); 
     
             strcat(debut2, fin); 
             strcat (debut1, fin); 
     
             fprintf ( stderr, "%s\n", debut1 );
             fprintf ( stderr, "%s\n", debut2 );
     
            return EXIT_SUCCESS ;
    }

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    Il serait surtout pas mal de savoir à quel niveau réside le problème. Pour récupérer la saisie utilisateur ? Pour concaténer les 2 chaînes ? Pour ouvrir le fichier une fois les chaînes concaténées ?

    Sinon une autre méthode pour la concaténation est sprintf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      char filename[FILENAME_MAX];
      sprintf(filename, "jeu/acces/%s", user_file);

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    alors voila mon probleme

    je viens de comprendre mon probleme il s'agit du fgets

    je recupere la 1ere ligne du fichier avec fgets dans une variable que j'ai appeler lecture!!!

    (char lecture[100]

    mais ensuite je veux justement concatenee le contenu de lecture a /jeu/acces/

    puis alors ouvrir le fichier /jeu/acces/"lecture"

    le probleme etant que mon tableau lecture est beaucoup tros grand

    il va donc ouvrir le fichier (avec la 1ere ligne de lecture="niveau")

    "/jeu/acces/niveau "

    qu'il ne trouve donc pas

    alors ma question serait comment recuperer toujours avec le fgets le contenu de la 1ere ligne sans les espaces en trop

    j'ai penser tout simplement a les enlever sans succes

    quelqu'un aurait-il une reponse a mon probleme

  11. #11
    Membre éprouvé Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Points : 969
    Points
    969
    Par défaut
    Ce que je voulais montré est la partie concaténation qui est bien du C on ce fiche du cout endl ! ce n'est pas le problème, même si c'est vrai ce n'est pas du C, je pense que posté 2 message pour dire ca n'avance rien !
    De plus je pense que la réponse a été donné ! on ne va pas epilogué la dessus !

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    @acik : on t'a dit poste le code qui fait problème...

    @jeremy : les 2 posts de crocodliex et moi se sont croisés c'est tout..

  13. #13
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par acik59
    alors ma question serait comment recuperer toujours avec le fgets le contenu de la 1ere ligne sans les espaces en trop

    j'ai penser tout simplement a les enlever sans succes

    quelqu'un aurait-il une reponse a mon probleme
    Montre ton code, qu'on puisse te dire ce qui ne va pas avec.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    alors voila le code

    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
    FILE *tab;
    FILE *rep;
    char lecture[100];
    char *param;
    char essaie[100]="/jeu/acces";
     
     
    param="/jeu/acces/niveaufin.tab";
     
    tab=fopen(param,"r"); 
    fgets(lecture,100,tab);
     
    sprintf(essaie,"%s%s",essaie,lecture);
    rep=fopen(essaie,"r");
     
    if(rep==NULL)
       printf("il nexiste pas");
    else
    {
       printf("il existe");
       fclose(rep);
    }

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    etant donne que dans mon lecture j'aurais

    lecture="niveau________________________________________"

    ( _ = espace )

    il va donc essayer d'ouvrir

    "/jeu/acces/niveau__________________________

    d'ou il ne le trouve pas

    il est donc la le probleme

  16. #16
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    Où est le problème ??
    Il suffit de virer les espaces, ou ce n'est pas "/jeu/acces/niveau" que tu souhaites ouvrir ??
    Pour récupérer la saisie utilisateur, il te suffit d'utiliser la fonction fgets en prennant le soin, une fois la récupération de faite, de virer le '\n' s'il existe en fin de chaîne et tu le remplaces alors par un '\0' !

  17. #17
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par acik59
    alors voila le code
    OK au moins 5 choses :

    • 1) param n'a pas de taille définie, et tu lui affectes une valeur.
    • 2) pas de test sur le retour de fopen
    • 3) pas de test sur le retour de fgets
    • 4) le fgets prend en compte le "\n" à la fin
    • 5) essaie est défini avec une taille, puis tu l'initialises direct. ça marche pas comme ça.
    • 6) essaie ne s'écrit pas comme ça, mais "essai"


    Donc :

    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
     
    FILE *tab=NULL;
    FILE *rep=NULL;
    char *p = NULL ;
    char lecture[100];
    char *param="/jeu/acces/niveaufin.tab";
    char essaie[100];
     
     
    strcpy ( essaie, "/jeu/acces");
     
    tab=fopen(param,"r"); 
    if ( tab == NULL ) 
      {
         fprintf ( stderr, "\Erreur d'ouverture fichier %s\n", param);
      }
    else
      {
         if ( fgets(lecture,100,tab) == NULL )
           {
              fprintf ( stderr, "\n Erreur de lecture du fichier %s\n", param);
           }
         else
           {
                if ( (p = strchr(lecture, '\n')) != NULL )
                     *p = '\0' ;
                strcat(essaie,"%s",lecture);
                rep=fopen(essaie,"r");
                if ( rep == NULL )
                  {
                     fprintf ( stderr, "\n Erreur d'ouverture du fichier %s", essaie);
                  }
                else
                  {
                      printf("il existe");
                      fclose(rep); 
                  }
            }
        }
    }

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    merci souviron

    ca marche nikel

  19. #19
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par souviron34
    1) param n'a pas de taille définie, et tu lui affectes une valeur.
    Pardon, que veux-tu dire par la ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char *param;
     
    param = "/jeu/acces/niveaufin.tab";
    est valide (meme si je trouve plus propre d'initialiser le pointeur lors de la definition comme tu l'as fait) et met dans param l'adresse de la chaine constante.

    Par contre la chaine n'etant pas modifiable, un const serait le bienvenu.

  20. #20
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par gl
    Pardon, que veux-tu dire par la ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char *param;
     
    param = "/jeu/acces/niveaufin.tab";
    est valide (meme si je trouve plus propre d'initialiser le pointeur lors de la definition comme tu l'as fait) et met dans param l'adresse de la chaine constante.

    Par contre la chaine n'etant pas modifiable, un const serait le bienvenu.
    Effectivement.. Mais comme je préfère de loin l'initialisation lors de la définition dans ce genre de cas....

    Et en fait je préfère encore plus de loin un strcpy avec la chaine ...

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

Discussions similaires

  1. ouverture de fichier txt
    Par juguul dans le forum MFC
    Réponses: 11
    Dernier message: 18/12/2003, 09h44
  2. Ouverture de fichier en api
    Par Michaël dans le forum Windows
    Réponses: 9
    Dernier message: 10/12/2003, 16h47
  3. Ouverture de fichier
    Par Ricou.13 dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/10/2003, 08h59
  4. Réponses: 2
    Dernier message: 26/02/2003, 15h18
  5. [VBA-E] Evenement ouverture de fichier
    Par gjeff dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/12/2002, 09h42

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