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.
Il vous suffit d'appeler myPath.string()
.
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.
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...
}
Appeler myPath.generic_string()
fera ce dont vous avez besoin.
Faire ceci
path.c_str();
Vous devriez aller bien.