Le C ++ a-t-il un équivalent à la fonction de python os.path.join
? Fondamentalement, je recherche quelque chose qui combine deux (ou plus) parties d'un chemin de fichier afin que vous n'ayez pas à vous soucier de vous assurer que les deux parties s'emboîtent parfaitement. Si c'est dans Qt, ce serait cool aussi.
En gros, j'ai passé une heure à déboguer du code et au moins une partie de cela était root + filename
dû au fait que cela devait être root/ + filename
, et je cherche à éviter cela à l'avenir.
complete
)Réponses:
Découvrez QDir pour cela:
la source
Uniquement dans le cadre de la bibliothèque Boost.Filesystem . Voici un exemple:
Voici un exemple de compilation et d'exécution (spécifique à la plateforme):
la source
Similaire à la réponse de @ user405725 (mais n'utilisant pas boost), et mentionnée par @ildjarn dans un commentaire, cette fonctionnalité est disponible dans le cadre de std :: filesystem . Le code suivant se compile en utilisant Homebrew GCC 9.2.0_1 et en utilisant l'indicateur
--std=c++17
:la source
Au moins sous Unix / Linux, il est toujours sûr de joindre des parties d'un chemin
/
, même si certaines parties du chemin se terminent déjà par/
, c'estroot/path
-à- dire équivalent àroot//path
.Dans ce cas, tout ce dont vous avez vraiment besoin est de joindre les choses
/
. Cela dit, je suis d'accord avec d'autres réponses quiboost::filesystem
sont un bon choix si elles sont disponibles car elles prennent en charge plusieurs plates-formes.la source
Si vous voulez faire cela avec Qt, vous pouvez utiliser le
QFileInfo
constructeur:la source
Avec C ++ 11 et Qt, vous pouvez faire ceci:
Usage:
la source
Dans Qt, utilisez simplement
/
dans le code lorsque vous utilisez l'API Qt (QFile
,QFileInfo
). Il fera ce qu'il faut sur toutes les plateformes. Si vous devez passer un chemin vers une fonction non-Qt, ou souhaitez le formater pour l'afficher à l'utilisateur, utilisezQDir:toNativeSeparators()
par exemple:Il remplacera
/
par l'équivalent natif (c'est-\
à- dire sous Windows). L'autre sens se fait viaQDir::fromNativeSeparators()
.la source