Question

Je suis en train d'écrire une application multi-plateforme qui doit inspecter et manipuler les chemins de Windows.

Plus précisément, le problème particulier, j'ai maintenant, je dois savoir si un chemin est absolu ou relatif.

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 de chemin d'accès Windows est indisponible lorsque je compile sous Linux (il est #ifdefed dans la source). Par conséquent, le chemin. "C: \ chemin" est considéré comme absolu dans Windows, mais par rapport à Linux


Pouvez-vous recommander un gars multi-plateforme bibliothèque C ++ qui peuvent inspecter et manipuler des chemins à 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 je vais utiliser pour un chemin absolu est qu'il contient à la fois une lettre de lecteur et le chemin commence par \. Un exemple d'un chemin absolu sous ce critère est C:\path. Ce sont là deux exemples de chemins relatifs à ce critère. C:path, \path

Était-ce utile?

La solution 2

Il semble difficile de trouver une bibliothèque pour cela. Une possibilité est PathIsRelative dans Winelib, mais je ne veux pas utiliser Winelib.

J'ai fini par faire une solution très spécifique juste pour se prononcer sur cette petite chose. En supposant que le chemin est correct (une hypothèse juste dans mon cas), un chemin absolu contiendra :\, tandis qu'un chemin relatif ne sera pas.

Alors, le mauvais, mais travailler, la solution est la suivante: Il n'y a pas de bibliothèque appropriée. Vérifiez l'existence de :\.

Autres conseils

Qu'en est-il de l'intervalle QT avec QFileInfo ?

Pourriez-vous préciser ce que le programme est censé faire avec les chemins d'accès Windows sur Linux?

Peut-être qu'il suffit d'appliquer une transformation simple à la chaîne de chemin Windows, transformant syntaxiquement en un chemin Unix, et ensuite utiliser boost :: système de fichiers pour le manipuler.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top