Bonjour J'ai actuellement un programme qui obtient un chemin complet de l'emplacement d'un fichier et qui est placé dans une variable du type: boost :: filesystem2 :: path
J'ai cherché comment faire cela et j'ai trouvé cela en utilisant:
string result1 = boost::filesystem::basename (myPath)
convertira le chemin en chaîne MAIS il ne convertit que le nom du fichier (par exemple, si le chemin est "C: \ name \ bobsAwesomeWordDoc.docx", il renvoie simplement "bobsAwesomeWordDoc").
J'ai trouvé ce qui suit sur la façon de convertir le chemin complet en chaîne, mais je ne sais pas comment l'implémenter dans mon programme. J'ai essayé plusieurs façons mais j'obtiens des erreurs de conversion.
const std :: string & string (): Cette routine renvoie une copie de la chaîne avec laquelle le chemin a été initialisé, avec le formatage selon les règles de grammaire du chemin.
(trouvé ici )
J'ai essayé:
string result1 = string& (myPath);
et quelques autres variantes.
u8string()
, mais cela n'aide pas oùstring()
est utilisé automatiquement.Je crois que vous devez faire un peu plus que juste convertir le chemin vers une chaîne - vous devez d' abord obtenir la version canonique du chemin - un chemin absolu sans élément symbolique de liaison - et convertir que dans une chaîne:
PS - Je programme avec Boost depuis des lustres et je n'ai pas pu trouver facilement cette information dans la documentation.
Mise à jour (octobre 2017)
Documentation: boost :: filesystem :: canonical .
Mais notez qu'à partir de C ++ 17, il existe std :: filesystem , avec canonical et bien plus encore.
la source
canonize
qui est obsolète, par votre deuxième lien, maiscanonical
ne semble pas l'être (par votre premier lien, pour 1_48 V3). Maintenant en C ++ 17, nous avonsstd::filesystem
bien sûrCela a fonctionné dans wxWidgets: (je sais que je devrais simplement utiliser les utilitaires wx mais c'est un test)
la source
L'appel
myPath.generic_string()
fera ce dont vous avez besoin.la source
Faire ça
path.c_str();
Vous devriez aller bien.
la source