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

Langage C++ Discussion :

Extraire path d'un repertoire à partir d'un chemin de fichier


Sujet :

Langage C++

  1. #1
    Membre du Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2007
    Messages : 53
    Points : 52
    Points
    52
    Par défaut Extraire path d'un repertoire à partir d'un chemin de fichier
    Bonjour,

    Ma question est simple, tout est dans le titre; cepandant malgré pas mal de recherche, je ne trouve pas la réponse que j'attends.

    Le problème est le suivant :
    J'ai un chemin de fichier, prenons par exemple :
    C:\repertoire1\sous_repertoire10\mon_fichier.txt

    Quel est le nom de la fonction (ou méthode) permettant de récupérer uniquement le chemin du repertoire; autrement dit :
    C:\repertoire1\sous_repertoire10\ ?


    Pour information;
    je développe une dll sous visual studio 2008.

    Merci d'avance.

  2. #2
    Membre confirmé
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Points : 533
    Points
    533
    Par défaut
    Bah au pire tu fais ça à la main en prenant la sous-chaine qui va de 0 à l'index du dernier antislash que tu trouve.
    Mais il doit bien y avoir des fonctions toutes faites pour faire ça...

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Points : 248
    Points
    248
    Par défaut
    Avec Qt tu peux en Boost aussi je pense mais rien avec les lib standard a mon avis

  4. #4
    Membre du Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2007
    Messages : 53
    Points : 52
    Points
    52
    Par défaut
    haraelendil : C'est ce que je m'apprêtais à faire avant de poster mon message.
    Ce n'est pas bien sorcier à faire, je te l'accorde; mais réinventer la poudre ne sert souvent pas à grand chose.

    Merci tout de même ;-).

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Etant donné que les chemins peuvent contenir aussi bien des \ que des / il faut s'assrer de ne pas vérifier uniquement la présence de \.
    Et puis, il peut ne pas y avoir de \ ni / du tout.

  6. #6
    Membre confirmé
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Points : 533
    Points
    533
    Par défaut
    il me semble bien qu'en unix il y a une fonction toute faite pour ça qui a été traduite en C, de la se rappeler le nom et à savoir si elle est standard, c'est autre chose^^

  7. #7
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Tu as plusieurs solutions :
    1- Méthode maison.
    2- boost.Filesystem.

    Dans ton cas, la méthode maison peut suffire. Avec un petit algo de la STL bien placé, ça va tout seul. A vue de nez, je dirai un std::find_first_of couplé avec un reverse itérator et un foncteur de ton cru pour tester à la fois "\" et "/" comme on te l'a fait remarqué précédemment...

  8. #8
    Invité
    Invité(e)
    Par défaut
    Pour la methode maison, il y aussi std::string::find_last_of().

  9. #9
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Je pense que la famille des splitpath peut répondre à ton besoin.
    Par contre -c'est du C- ça n'a pas l'air très standard.

  10. #10
    Membre du Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Novembre 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2007
    Messages : 53
    Points : 52
    Points
    52
    Par défaut [RESOLU] en utilisant _splitpath
    Pour ceux que cela intéresse, comme l'a indiqué mabu, _splitpath permet de séparer chemin du répertoire et nom du fichier ... et même mieux puisque la fonction renvoie :
    - le nom du lecteur
    - le chemin du répertoire
    - le nom du fichier
    - l'extension

    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
     
     
    #include <stdlib> 
    #include <iostream>
     
    using namespace std; 
    int main(int argc, char **argv)
    {
     
        char* path_to_split = "C:\\repertoire1\\sous_repertoire\\fichier.txt";
        char drive[256]; 
        char dir[266]; 
        char file_name[266]; 
        char file_ext[266]; 
     
        _splitpath(path_to_split,drive, dir, file_name, file_ext);
     
        cout << "input : " << path_to_split << endl;
        cout << "drive : " << drive << endl; 
        cout << "dir : " << dir << endl; 
        cout << "file_name : " << file_name << endl; 
        cout << "file_ext : " << file_ext << endl ; 
     
        return 0 ; 
    }
    Ce code doit afficher le texte suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    input : C:\repertoire1\sous_repertoire\fichier.txt
    drive : C:
    dir : \repertoire1\sous_repertoire\
    file_name : fichier
    file_ext : .txt

    Pour ceux que cela intéresse, l'opération inverse est également possible; c'est à dire reconstruire un chemin complet à partir des 4 champs : lecteur, répertoire, nom de fichier, extension :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _makepath( path_buffer, "c", "\\sample\\crt\\", "makepath", "c" );
    Ce code génère donc le chemin suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    c:\sample\crt\makepath.c

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

Discussions similaires

  1. [RegEx] Regex d'extraction d'une chaine à partir d'un chemin de fichier
    Par cryosore dans le forum Langage
    Réponses: 1
    Dernier message: 07/03/2010, 20h47
  2. Obtenir un ICompilationUnit à partir d'un chemin de fichier
    Par laurent_diep dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 21/05/2009, 18h24
  3. Obtenir un ICompilationUnit à partir d'un chemin de fichier
    Par laurent_diep dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 11/05/2009, 20h49
  4. creer un repertoire à partir d'un nom de fichier
    Par quefets dans le forum Langage
    Réponses: 15
    Dernier message: 05/12/2008, 10h23
  5. Récupérer le Path d' un repertoire
    Par wil4linux dans le forum ASP
    Réponses: 2
    Dernier message: 15/09/2005, 18h30

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