Olá Atualmente, tenho um programa que obtém um caminho completo da localização de um arquivo e é colocado em uma variável do tipo: boost :: filesystem2 :: path
Eu procurei como fazer isso e descobri que usando:
string result1 = boost::filesystem::basename (myPath)
irá converter o caminho para string, mas apenas converterá o nome do arquivo (por exemplo, se o caminho for "C: \ name \ bobsAwesomeWordDoc.docx", ele retornará "bobsAwesomeWordDoc").
Encontrei o seguinte sobre como converter o caminho inteiro em string, mas não sei como implementá-lo no meu programa. Eu tentei várias maneiras, mas estou recebendo erros de conversão.
const std :: string & string (): esta rotina retorna uma cópia da string com a qual o caminho foi inicializado, com formatação de acordo com as regras gramaticais do caminho.
(encontrado aqui )
Eu tentei:
string result1 = string& (myPath);
e algumas outras variações.
u8string()
, mas isso não ajuda ondestring()
é usado automaticamente.Eu acredito que você precisa fazer um pouco mais do que apenas converter o caminho em uma string - você deve primeiro obter a versão canônica do caminho - um caminho absoluto sem elementos de link simbólico - e convertê- lo em uma string:
PS - Venho programando com o Boost há muito tempo e não consegui encontrar essas informações facilmente nos documentos.
Atualização (out 2017)
Documentação: boost :: filesystem :: canonical .
Mas observe que, a partir do C ++ 17, existe o sistema std :: files , com canonical e muito mais.
fonte
canonize
que está obsoleto, por seu segundo link, mascanonical
não parece estar (por seu primeiro link, para 1_48 V3). Agora, em C ++ 17, temos, éstd::filesystem
claro,Isso funcionou no wxWidgets: (eu sei que devo usar os utilitários wx, mas é um teste)
fonte
Ligar
myPath.generic_string()
fará o que você precisar.fonte
Faça isso
path.c_str();
Você deveria ficar bem.
fonte