O C ++ tem algum equivalente à função do python os.path.join
? Basicamente, estou procurando algo que combine duas (ou mais) partes de um caminho de arquivo para que você não precise se preocupar em ter certeza de que as duas partes se encaixam perfeitamente. Se estiver no Qt, também seria legal.
Basicamente, passei uma hora depurando algum código e pelo menos parte dele foi porque root + filename
tinha que ser root/ + filename
, e estou procurando evitar isso no futuro.
complete
)Respostas:
Verifique o QDir para isso:
fonte
Apenas como parte da biblioteca Boost.Filesystem . Aqui está um exemplo:
Aqui está um exemplo de compilação e execução (específico da plataforma):
fonte
Semelhante à resposta de @ user405725 (mas não usando boost), e mencionada por @ildjarn em um comentário, esta funcionalidade está disponível como parte de std :: filesystem . O código a seguir é compilado usando o Homebrew GCC 9.2.0_1 e usando o sinalizador
--std=c++17
:fonte
Pelo menos no Unix / Linux, é sempre seguro juntar partes de um caminho por
/
, mesmo que algumas partes do caminho já terminem em/
, ou seja, sejaroot/path
equivalente aroot//path
.Nesse caso, tudo o que você realmente precisa é juntar as coisas
/
. Dito isso, concordo com outras respostas queboost::filesystem
é uma boa escolha se estiver disponível para você porque oferece suporte a várias plataformas.fonte
Se você quiser fazer isso com Qt, pode usar o
QFileInfo
construtor:fonte
Com C ++ 11 e Qt, você pode fazer isso:
Uso:
fonte
No Qt, apenas use
/
em código ao usar a API Qt (QFile
,QFileInfo
). Ele fará a coisa certa em todas as plataformas. Se você tiver que passar um caminho para uma função não-Qt, ou deseja formatá-lo para exibi-lo ao usuário, useQDir:toNativeSeparators()
por exemplo:Ele será substituído
/
pelo equivalente nativo (ou seja,\
no Windows). A outra direção é feita viaQDir::fromNativeSeparators()
.fonte