c++ boost path

c++ - ¿Cómo convertir el tipo de ruta boost a string?



path (4)

Creo que necesitas hacer algo más que simplemente convertir la ruta en una cadena: primero debes obtener la versión canónica de la ruta, una ruta absoluta sin elementos de enlace simbólico, y convertirla en una cadena:

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

PD: he estado programando con Boost durante años y no pude encontrar fácilmente esta información en los documentos.

Actualización (Oct 2017)

Documentación: boost::filesystem::canonical .

Pero tenga en cuenta que a partir de C ++ 17 hay std::filesystem , canonical y mucho más.

Hola, actualmente tengo un programa que obtiene una ruta completa de la ubicación de un archivo y se coloca en una variable que es del tipo: boost :: filesystem2 :: path

He buscado cómo hacer esto y he descubierto que al usar:

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

convertirá la ruta en cadena PERO solo convierte el nombre del archivo (por ejemplo, si la ruta es "C: / nombre / bobsAwesomeWordDoc.docx" simplemente devuelve "bobsAwesomeWordDoc").

He encontrado lo siguiente sobre cómo convertir toda la ruta en cadena, pero no sé cómo implementarlo en mi programa. Lo he intentado de varias maneras, pero obtengo errores de conversión.

const std :: string & string (): esta rutina devuelve una copia de la cadena con la que se inicializó la ruta, con formato según las reglas de la gramática de ruta.

(encontrado here )

Yo he tratado:

string result1 = string& (myPath);

y algunas otras variaciones.


Esto funcionó en wxWidgets: (Sé que debería usar las utilidades wx pero es una prueba)

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... }


Llamar a myPath.generic_string() hará lo que necesite.


Solo necesita llamar a myPath.string() .