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

MFC Discussion :

[standards] Basename


Sujet :

MFC

  1. #1
    Invité
    Invité(e)
    Par défaut [standards] Basename
    Y a t'il une fonction basename() pour Visual C++ ?
    Cette fonction a la propriété de récupérer d'un chemin absolu le nom d'un fichier. Cette fonction très simple existe en PhP et Unix.

    Je suis en train de la refaire en ce moment.
    Puisque je suis en train de le faire, y a t'il une méthode élégante avec les std::string ou carrément avec les CString de la MFC ?

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    en C tu as la fonction _splitpath qui permet de decomposer un chemin .

  3. #3
    Invité
    Invité(e)
    Par défaut
    c noté. Encore merci Farscape

    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
     
    #include <stdlib.h>
     
    char*			Basename(std::string path)
    {
    	char*		result = NULL;
    	char*		drive = NULL;
    	char*		dir = NULL;
    	char		fname[_MAX_FNAME];
    	char		ext[_MAX_EXT];
     
    	_splitpath(path.c_str(), drive, dir, fname, ext);
    	result = new char[strlen(fname) + strlen(ext)];
    	result = strcpy(result, fname);
    	result = strcat(result, ext);
    	return result;
    }

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    hum attention :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char drive[_MAX_DRIVE];
    char dir[_MAX_DIR];
    les pointeurs de reception de cette fonction doivent avoir une zone memoire associée...

    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
     
    std::string  Basename(std::string path)
    {
       std::string Result;
       char drive[_MAX_DRIVE];
       char dir[_MAX_DIR];
     
       char      fname[_MAX_FNAME];
       char      ext[_MAX_EXT];
     
       _splitpath(path.c_str(), drive, dir, fname, ext);
       Result=fname;
       Result+=ext;
     
       return Result;
    }
    tant qu'a faire propre autant utiliser les string jusqu'au bout

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je suis entièrement d'accord avec toi. Des strings jusqu'au bout.

    Pour l'histoire des allocations mémoire, dans la MSDN il est indiqué qu'il faut initialiser les pointeurs à NULL si on les utilisait pas.
    C'était chose faite.

    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
     
    std::string		Basename(std::string path)
    {
       std::string		Result;
       char* drive = NULL; /* non utilisé cf MSDN */
       char* dir = NULL; /* non utilisé cf MSDN */
       char	fname[_MAX_FNAME];
       char	ext[_MAX_EXT];
     
       _splitpath(path.c_str(), drive, dir, fname, ext);
       Result = fname;
       Result += ext;
       return Result;
    }

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

Discussions similaires

  1. Standard cryptographique AES et licence d'utilisation
    Par KORTA dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 24/09/2003, 13h33
  2. Réponses: 16
    Dernier message: 18/07/2003, 17h16
  3. Lecture standard et communication entre processus!
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/07/2003, 16h37
  4. Comment savoir qu'une fonction est standard ?
    Par D[r]eadLock dans le forum C
    Réponses: 5
    Dernier message: 24/03/2003, 14h42
  5. [librairies standard]slang.h et curses.h
    Par miss8 dans le forum Réseau
    Réponses: 13
    Dernier message: 27/12/2002, 10h14

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