J'écris une application multi-plateforme qui doit inspecter et manipuler les chemins Windows. En particulier, pour le problème particulier que j'ai actuellement, j'ai besoin de savoir si un chemin est absolu ou relatif.Bibliothèque multi-plateforme pour la manipulation des chemins Windows?
Le code actuel utilise boost::filesystem::path
qui bien sûr fonctionne comme un charme sur Windows:
boost::filesystem::path the_path(the_path_as_a_string);
if (!the_path.has_root_path()) { /* do stuff */ }
Le problème avec cette approche est que boost::filesystem::path
n'a que deux modes: natifs et portables. Cela signifie que la grammaire du chemin Windows est indisponible lorsque je compile sous Linux (il est #ifdef
dans la source). Par conséquent, le chemin "C: \ path" est considéré comme absolu dans Windows, mais relatif dans Linux. Pouvez-vous recommander une bibliothèque C++ multiplate-forme qui peut inspecter et manipuler les chemins d'accès Windows?
Pour l'instant, la seule opération de chemin de Windows que je vais faire est de vérifier si un chemin est absolu ou non.
Le critère que j'utiliserai pour un chemin absolu est qu'il contient tous les deux une lettre de lecteur et que le chemin commence par \
. Un exemple de chemin absolu sous ce critère est C:\path
. Ce sont deux exemples de chemins relatifs sous ce critère: C:path
, \path
.
Vous savez que la distinction n'est pas ce noir et blanc? Considérons le chemin valide 'C: foo.txt'. Il utilise le répertoire de travail courant du lecteur C:! – MSalters
MSalters: Je n'y avais pas pensé au moment où j'ai posé la question. Il semble aussi que l'auteur original du code que j'essaie de maintenir n'y ait pas pensé. Maintenant, je dois trouver le comportement que nous voulons vraiment ... –