web-dev-qa-db-fra.com

Comment convertir le type de chemin boost en chaîne?

Bonjour, j'ai actuellement un programme qui obtient le 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é que:

string result1 = boost::filesystem::basename (myPath)

convertira le chemin en chaîne MAIS il convertira uniquement le nom du fichier (par exemple, si le chemin est "C:\nom\bobsAwesomeWordDoc.docx", il retourne simplement "bobsAwesomeWordDoc").

J'ai trouvé ce qui suit sur la façon de convertir le chemin d'accès complet en chaîne, .__, mais je ne sais pas comment l'implémenter dans mon programme. J'ai essayé de plusieurs manières 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 un formatage conforme aux règles de grammaire.

(trouvé ici )

J'ai essayé:

string result1 = string& (myPath);

et quelques autres variations.

115
Johnston

Il vous suffit d'appeler myPath.string().

138
icecrime

Je crois que vous devez faire un peu plus que simplement convertir le chemin en chaîne - vous devez d’abord obtenir la version canonique du chemin - un chemin absolu sans élément de lien symbolique - et convertir that en chaîne:

boost::filesystem::canonical(myPath).string();

P.S. - Je programme avec Boost depuis des années et je ne pouvais pas trouver facilement cette information dans la documentation.


Mise à jour (octobre 2017) 

Documentation: boost :: système de fichiers :: canonique

Mais notez que depuis C++ 17, il existe std :: système de fichiers , avec canonical et bien plus encore.

10
resigned

Cela a fonctionné dans wxWidgets: (Je sais que je devrais juste utiliser les utilitaires wx Mais c'est un test)

void WxWidgetsBoostTestFrame::OnTestBtnClick(wxCommandEvent& event)
{
    boost::filesystem::path currentPath;
    currentPath = boost::filesystem::current_path();
    std::string curDirString;
    curDirString = boost::filesystem::canonical(currentPath).string();
    wxString mystring(curDirString.c_str(), wxConvUTF8);
    wxMessageBox(mystring); // output:  C:/Users\client\Desktop...      
}
3
Paddy

Appeler myPath.generic_string() fera ce dont vous avez besoin.

1
J.Adler

Faire ceci

path.c_str();

Vous devriez aller bien.

0
Calorified