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

Boost C++ Discussion :

Boost.filesystem et les chemins avec des espaces/signes


Sujet :

Boost C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Par d�faut Boost.filesystem et les chemins avec des espaces/signes
    Bonjour � tous,

    J'essaie d'utiliser boost.filesystem avec des chemins contenant des espaces.
    Il s'agit du chemin "Application Data" (C:\Documents and Settings\usr\Application Data) sous Windows et du chemin "appdata" (un simple dossier appdata par rapport � l'exe) sous les autres OS.
    Pour la portablilit� je sais que boost::filesystem::path ne supporte pas les racines, je supprime donc le C: sous Windows. Le probl�me c'est que boost::filesystem::path semble aussi ne pas supporter les espaces (pour des raisons de portablilit� j'imagine).
    En effet lorsque je fournis � la classe path un chemin avec espaces je vois le message suivant sur la ligne de commande :
    This application has requested the Runtime to terminate it in an unusual way.
    Please contact the application's support team for more information.
    J'ai essay� avec la forme courte du chemin (/DOCUME~1/ADMINI~1/APPLIC~1) mais �a ne change rien.
    Pourtant pour un chemin comme par exemple "/chemin" tout fonctionne � merveille.
    J'aimerais donc savoir comment faire lorsqu'un chemin contient des espaces, pour que boost::filesystem::path l'accepte, si cela est possible bien sur.

    D'avance merci!

    Spartan03

  2. #2
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Pour la portabilit�, Boost.Filesystem supporte la racine, c'est juste que sous Linux, il n'y en a pas, donc il n'y a pas d'int�r�t � en mettre, je ne vois pas le pourquoi de l'argument de la portabilit�.
    Ensuite, en ce qui concerne le plantage, le d�buggage indique qu'il a lieu � quel endroit ?

  3. #3
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

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

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Question comme �a : As-tu bien indiqu� que tu utilisais des chemins natifs ?
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  4. #4
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Tu n'aurais pas une exception qui s'�chappe des fois ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Par d�faut
    Citation Envoy� par Miles
    Ensuite, en ce qui concerne le plantage, le d�buggage indique qu'il a lieu � quel endroit ?
    Le plantage � lieu lors de la construction de mon instance de path.

    Citation Envoy� par JolyLoic
    Question comme �a : As-tu bien indiqu� que tu utilisais des chemins natifs ?
    Non, je ne vois pas comment faire pour l'indiquer lors de la construction de mon instance de path. Pourrais-tu me le dire?

    Citation Envoy� par Luc Hermitte
    Tu n'aurais pas une exception qui s'�chappe des fois ?
    Euh, je n'avais pas pens� � r�cup�rer les exceptions , j'ai fait mon petit bloc try/catch et effectivement! Lorsque je fournis un chemin avec racine j'ai l'exception suivante :
    noost::filesystem::path invalid name C: in path "C:/Documents and Settings/Administrateur/Application Data
    (A noter que j'ai remplac� les antislashs de Windows par des slashs).

  6. #6
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Et tu as essay� avec "\ " ? - �chappement des espaces sous Linux -

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Par d�faut
    Citation Envoy� par Miles
    Et tu as essay� avec "\ " ? - �chappement des espaces sous Linux -
    Oui mais la il y'a carr�ment un warning � la compilation (et toujours le m�me bug � l'�x�cution qui me dit que "Documents and Settings" n'est pas valide dans le chemin "/Documents and Settings/Aministrateur/Application Data.
    Le warning c'est
    Citation Envoy� par MinGW
    warning: unknown escape sequence: '\040'
    J'imagine que c'est parce que je compile sous Windows.

  8. #8
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Pardon, il fallait mettre "\\ " pour �chapper le '\'

  9. #9
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Par d�faut
    D�sol� mais �a ne change rien hormis le fait que le invalid name soit "Documents\ and\ Settings" bien sur .

  10. #10
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    ...
    Aucune id�e sur le coup...

  11. #11
    Membre �m�rite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    D�tails du profil
    Informations personnelles :
    �ge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par d�faut
    Tu pourrais nous donner ton code ?
    (un main compilable facilement rapidement)

    merci a+

  12. #12
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Par d�faut
    OK pas de probl�me, j'en avais d�ja pr�par� un pour moi afin d'isoler mon probl�me.! Le voil�:

    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
    41
    #include <iostream>
    #include <boost/filesystem/path.hpp>
    #include <boost/filesystem/convenience.hpp>
    #include <fstream>
     
    #include <windows.h>
    #include <shlobj.h>
    #include <algorithm>
     
    int main()
    {
     
        try
        {
        char chemin_c[MAX_PATH];
        SHGetFolderPath(NULL,CSIDL_APPDATA|CSIDL_FLAG_CREATE,NULL,0,chemin_c);
     
        //On remplace les \ bidons de Windows par les / d'Unix, afin de pouvoir
        //manipuler les fichiers grace aux flux de la bibliothèque standard fstream
        std::replace(chemin_c, chemin_c+MAX_PATH, '\\','/');
     
        //GetShortPathName(chemin_c, chemin_c, MAX_PATH); //J'avais essayé mais ça n'a pas marché ++
     
        //Suppression de la racine (idem ça ne bouge rien)
        //char* chemin_c2;
        //for(chemin_c2 = chemin_c; *chemin_c2 != '/';  chemin_c2++);
     
        std::cout << chemin_c << std::endl ;
     
        boost::filesystem::path chemin_config(chemin_c); // Ca bugue là!
     
        }
        catch(std::exception& ex)
        {
            MessageBox(NULL, ex.what(), "Exception", MB_OK|MB_ICONWARNING);
        }
     
     
     
    	return 0;
    }
    J'allais oublier, il faut bien sur linker la/les librairie statiques correspondant � boost::filesystem.

  13. #13
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    T'as essay� sans le changement de '\' en '/' ? Boost.filesystem supporte les 2 sous Windows, donc � priori pas besoin de faire de changements.

    De plus, �a ne compile pas, �a. MAX_PATH vaut quoi ?

  14. #14
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Par d�faut
    Citation Envoy� par Miles
    T'as essay� sans le changement de '\' en '/' ? Boost.filesystem supporte les 2 sous Windows, donc � priori pas besoin de faire de changements.

    De plus, �a ne compile pas, �a. MAX_PATH vaut quoi ?
    Ce reviens au m�me, MAX_PATH vaut 260 je crois. Mais il me semblait qu'il �tait d�finit dans "windows.h"

  15. #15
    R�dacteur

    Avatar de Matthieu Brucher
    Profil pro
    D�veloppeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France, Pyr�n�es Atlantiques (Aquitaine)

    Informations professionnelles :
    Activit� : D�veloppeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par d�faut
    Ah... mea culpa dans ce cas

  16. #16
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Par d�faut
    Victoire !!!!

    En utilisant le name_check "native" (ou "windows_name" vu que je tourne sous Windows XP) il accepte les espaces mais les antislashes (et les slashes aussi d'ailleurs!!) lui font p�ter un c�ble (en gros le name_check native retourne false!).

    Cepandant (j'ai bien fait de faire le test avant de poster, sinon j'allais encore en dire une ) bien que ce vieux name_check (native) retourne false, la construction de l'instance de path avec ce name_check se passe sans exceptions et d'ailleurs quand on utilise une racine de type "c:" tout est ok, de ++ lorsqu'on ne connait pas la racine (qu'on met "/") �a marche aussi nickel!!!
    Tout �a gr�ce � un name_check.
    Bon j'avoue que jusqu'� aujourd'hui je ne savais pas trop � quoi servaient ces petites fonctions et, en allant gratter dans l'impl�mentation de boost::filesystem j'ai compris � quoi elles servaient (les name_check functions je veux dire) !!!!

    Un petit bout de code qui marche!!! (Et en ++ vous n'avez pas � vous soucier du disque dur sur lequel cr�er les dossier!)

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    boost::filesystem::path chemin_config("/bonjour", &boost::filesystem::native);
    boost::filesystem::create_directories(chemin_config);
    Voil�!!
    Ouf, pas fach� de mettre ce sujet sur r�solu !

    Merci � tous, et particuli�rement � Miles, pour votre aide!!

  17. #17
    Membre �m�rite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    D�tails du profil
    Informations personnelles :
    �ge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par d�faut
    desol�, j'etais en train de compiler boost avec mingw32 ...
    je ne pouvais pas t'aider avant ... desol� mais heureux que tu es trouv� le probleme. Par contre utiliser native n'est peut-etre pas une voie portable ...

  18. #18
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    180
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 180
    Par d�faut
    Citation Envoy� par epsilon68
    desol�, j'etais en train de compiler boost avec mingw32 ...
    je ne pouvais pas t'aider avant ... desol� mais heureux que tu es trouv� le probleme. Par contre utiliser native n'est peut-etre pas une voie portable ...
    T'inqui�te, je sais � quel point compiler boost est long !
    Justement, je pense que native est portable puisque si je compile sous Windows, elle correspond � windows_name, sous unix, unix name etc...
    Je me trompe?!?

  19. #19
    Membre �m�rite
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    D�tails du profil
    Informations personnelles :
    �ge : 50
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Par d�faut
    Citation Envoy� par Spartan03
    T'inqui�te, je sais � quel point compiler boost est long !
    Justement, je pense que native est portable puisque si je compile sous Windows, elle correspond � windows_name, sous unix, unix name etc...
    Je me trompe?!?
    tu as parfaitement raison,
    juste pour dire, boost est compil� avec mingw32 et j'arrive a utilser eclipse maintenant ... he he he

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. G�rer un chemin avec des espaces
    Par helaaa dans le forum MATLAB
    R�ponses: 2
    Dernier message: 25/03/2013, 19h15
  2. Probl�me d'espaces dans les chemins avec Cygwin
    Par destructive dans le forum Applications et environnements graphiques
    R�ponses: 1
    Dernier message: 14/04/2008, 17h48
  3. Probl�me de chemin de fichier avec des espaces
    Par Akronyme dans le forum VB 6 et ant�rieur
    R�ponses: 13
    Dernier message: 11/12/2006, 17h12
  4. os.system et chemins avec des espaces
    Par frenchy404 dans le forum G�n�ral Python
    R�ponses: 3
    Dernier message: 08/12/2006, 22h03

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