111 votes

Comment construire une chaîne de chemin complète (en toute sécurité) à partir de chaînes séparées ?

Le C++ a-t-il un équivalent de la fonction de Python ? os.path.join ? En gros, je cherche quelque chose qui combine deux (ou plusieurs) parties d'un chemin de fichier de sorte 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 fait, j'ai passé une heure à déboguer du code et au moins une partie du problème était dû au fait que root + filename devait être root/ + filename et je cherche à éviter cela à l'avenir.

0 votes

Peut-être un parent éloigné : stackoverflow.com/questions/5772992/ (plus précisément, en ce qui concerne que La question est de savoir si boost complete )

5voto

kainjow Points 88

Avec C++11 et Qt, vous pouvez le faire :

QString join(const QString& v) {
    return v;
}

template<typename... Args>
QString join(const QString& first, Args... args) {
    return QDir(first).filePath(join(args...));
}

Utilisation :

QString path = join("/tmp", "dir", "file"); // /tmp/dir/file

4voto

Frank Osterfeld Points 13125

Dans Qt, il suffit d'utiliser / dans le code lors de l'utilisation de l'API Qt ( QFile , QFileInfo ). Il fera la bonne chose sur toutes les plateformes. Si vous devez passer un chemin à une fonction non-Qt, ou si vous voulez le formater pour l'afficher à l'utilisateur, utilisez QDir:toNativeSeparators() Par exemple :

QDir::toNativeSeparators( path );

Il remplacera / par l'équivalent natif (c'est-à-dire \ sur Windows). L'autre sens se fait via QDir::fromNativeSeparators() .

3voto

Andrew Finnell Points 9013

Je vous recommande de consulter le site de Boost Système de fichiers

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X