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 :

Fichier sous dossier


Sujet :

C

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 9
    Par défaut Fichier sous dossier
    Bonjour pour ouvrir un fichier dans un sous dossier lorsque le nom du dossier est un paramètre :

    Par exemple lorsque je connais déjà le sous dossier et le nom du fichier je dois écrire

    FILE* f = fopen("./mon_sous_dossier/test.txt","rt");

    Mais lorsque il le nom du fichier est un paramètre je fais comment pour que cela marche ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void open_plist(const char * restrict nf)
     
    {   
     
    FILE* f = fopen(/mon_sous_dossier/nf,"rt"); /*Ne marche pas*/
     
    }
    Merci de votre réponse =-)

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Bonjour.

    Si je comprend bien, tu cherches à faire une concaténation (coller deux chaînes à la suite) ?

    Dans ce cas :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <string.h>
    void open_plist(const char * restrict nf)
    {
        FILE* f = fopen(strcat("/mon_sous_dossier/", nf), "rt");
    }

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2012
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2012
    Messages : 257
    Par défaut Concaténation de chaines
    Bonjour,

    Il faut utiliser strcat() pour concaténer la chaine constante du répertoire et la chaine nf du fichier.

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Daïmanu Voir le message
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include <string.h>
    void open_plist(const char * restrict nf)
    {
        FILE* f = fopen(strcat("/mon_sous_dossier/", nf), "rt");
    }
    Je sens venir l'erreur de segmentation...
    (PS : l'option -Wwrite-strings de gcc nous avertit que quelque chose mal va peut-être se passer).


    Perso, j'utiliserais plutôt sprintf() pour écrire dans une variable temporaire. Exemple :
    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
    #include <errno.h>
    #include <stdio.h>
    #include <string.h>
     
    #define SUB_FOLDER	((const char*) "mon_sous_dossier")
     
    void open_plist(const char* filename)
    {
    	errno = 0;
     
    	char temp[256] = {0}; // there are better ways to create temp and to adjust its length
    	sprintf(temp, "./%s/%s", SUB_FOLDER, filename);
     
        FILE* f = fopen(temp, "rt");
     
        if(f == NULL)
        {
        	perror("Cannot open file");
        }
        else
        {
        	fclose(f);
        }
    }
     
    int main(void)
    {
    	open_plist("toto");
    }
    Le mot-clé restrict ne sert à rien, me semble t-il, car il n'y a qu'un seul pointeur en paramètre de la fonction.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Attention, le standard C ne connait pas "rt". Pour ouvrir un fichier en mode texte, "r" suffit.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [AC-2007] Code pour supprimer tous les fichiers, sous-dossiers d'un dossier
    Par lio33 dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/04/2015, 19h26
  2. Réponses: 1
    Dernier message: 14/10/2011, 15h33
  3. Réponses: 6
    Dernier message: 19/10/2009, 17h21
  4. Réponses: 4
    Dernier message: 29/08/2006, 18h02
  5. Lire un fichier situé dans 2 sous dossier...
    Par Pleymo dans le forum Langage
    Réponses: 10
    Dernier message: 08/12/2005, 09h30

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