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 el tipo de: boost :: filesystem2 :: path
He buscado cómo hacer esto y he encontrado que usando:
string result1 = boost::filesystem::basename (myPath)
convertirá la ruta a la cadena PERO solo convierte el nombre del archivo (por ejemplo, si la ruta es "C: \ name \ bobsAwesomeWordDoc.docx" simplemente devuelve "bobsAwesomeWordDoc").
He encontrado lo siguiente sobre cómo convertir la ruta completa a cadena, pero no sé cómo implementarlo en mi programa. He intentado varias formas, pero recibo 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 gramática de la ruta.
(encontrado aquí )
Yo he tratado:
string result1 = string& (myPath);
y algunas otras variaciones.
u8string()
, pero eso no ayuda cuandostring()
se usa automáticamente.Creo que hay que hacer un poco más que convertir el trazado a una cadena - primero debe obtener la versión canónica de la ruta - una ruta absoluta, sin elementos simbólico-Link - y convertir que en una cadena:
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 , con canonical y mucho más.
fuente
canonize
que está en desuso, según su segundo enlace, perocanonical
no parece serlo (según su primer enlace, para 1_48 V3). Ahora en C ++ 17 tenemosstd::filesystem
por supuestoEsto funcionó en wxWidgets: (Sé que debería usar las utilidades wx pero es una prueba)
fuente
Llamar
myPath.generic_string()
hará lo que necesita.fuente
Hacer esto
path.c_str();
Deberías estar bien.
fuente