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 :

Utilisation getcwd ()


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Par défaut Utilisation getcwd ()
    Bonjour,
    Je suis en train de faire un programme dans lequel j ai besoin de récupérer le chemin d un répertoire via la commande getcwd. Cependant je n'arrive pas à m'en sortir.
    Donc je veux récupérer dans la variable path, le chemin complet de mon fichier fich.

    Situation :

    je suis dans le répertoire "ici" depuis lequel j'exécute mon programme. Je lui donne en paramètre le nom d'un fichier situé dans un sous répertoire "sous" que j'ai ouvert et lu pour recuperer le nom du fichier.

    je veux : chemin.sous.fich

    Prototype de la fonction dans laquelle on travaille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void aff_stat(char *fich);
    Début de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void aff_stat(char *fich)
    {
        char *path;
        path = getcwd(fich, 1024);
     
     my_putstr(path); /* affichage du resultat*/  
    }

    Merci beaucoup par avance.

  2. #2
    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
    Allo ? Tu utilises un char* et tu n'alloues pas de mémoire ? Allooo ? (Nabila, sors de ce forum !)

    Voir : http://man.developpez.com/man3/getcwd.3.php
    La fonction getcwd() copie le chemin d'accès absolu du répertoire de travail courant dans la chaîne pointée par buf, qui est de longueur size.
    Si le chemin du répertoire en cours nécessite un buffer plus long que size octets, la fonction renvoie NULL, et errno contient le code d'erreur ERANGE. Une application doit détecter cette erreur et allouer un buffer plus grand si besoin est.
    De plus, je crois que tu utilises correctement la fonction getcwd() : elle copie le chemin du répertoire courant dans le buffer passé en paramètre et renvoie ce buffer. Elle n'analyse pas ce que contient la chaîne passée en paramètre, c'est un paramètre dit de sortie.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Par défaut
    Merci mais le man je l'ai déjà vu ^^

    Je récupère très bien le chemin absolu.
    le problème devient surtout la concaténation après, parce que getcwd va récupérer le chemin absolu du répertoire d exécution. Il faut donc que je concatène derrière la suite du chemin jusqu'au fichier.

    J'ai tenté avec strcat, mais ça segfault.
    J'ai tenté du realloc, mais toujours une erreur avec realloc.
    Sachant que je dois compiler avec gcc et tous les flages : -W -Wall -Werror -pedantic -ansi

  4. #4
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 871
    Par défaut
    C'est quasiment sûr que ton buffer n'est pas assez grand ou alors qu'il manque un '\0' quelque part parce que ce que tu veux faire est relativement simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    strcat(path, "/");
    strcat(path, filename);
    PS : l'option -W est inutile si -Wall est mise vue que la deuxième inclue la première (source : man gcc).

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Par défaut
    Bonjour,

    Merci pour vos réponses, j'ai finis par trouvé.
    Et j'ai aussi réalisé que la fonction getcwd n'était pas du tout optimisé pour ma situation et qu'il m'était en faite bien inutile.

    Et oui en effet Imperio, j'attribuais aussi une mauvaise taille au buf.

    Merci à tous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ......
    char* chemin;
    chemin =  malloc( (my_l(content) + my_l(path)) * sizeof(char) + 1);
     
    chemin = my_strcat(chemin, path);
    if (chemin[my_l(path) - 1] != '/')
         chemin = my_strcat(chemin, "/");
    chemin = my_strcat(chemin, content);
    ........
    my_l => longueur de la chaine
    my_strcat => strcat

  6. #6
    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
    Merci mais le man je l'ai déjà vu ^^
    Voir c'est bien, lire c'est mieux

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

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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