2008-09-23 6 views
12

Existe-t-il des classes autonomes C++ GNU qui gèrent les chemins multi-plateformes? Mes applications s'appuient sur Windows et Linux. Nos fichiers de configuration se réfèrent à un autre fichier dans un répertoire séparé. J'aimerais pouvoir lire le chemin de l'autre fichier de configuration dans une classe qui fonctionnerait sous Linux ou Windows.Gestion des chemins de fichier inter-plateforme

Quelle classe offrirait le plus petit encombrement pour traduire les chemins à utiliser sur l'un ou l'autre système?

Répondre

9

À moins que vous n'utilisiez des chemins absolus, il n'y a pas besoin de traduction - Windows convertit automatiquement les barres obliques en barres obliques inverses, donc si vous utilisez des chemins relatifs avec des séparateurs de barre oblique, Vous devriez vraiment éviter les chemins absolus si cela est possible.

+0

Pour le besoin simple que j'ai, c'est parfait. – Superpolock

+1

non portable aux systèmes d'exploitation avec différentes règles d'échappement, de citation et de délimitation (par ex., Mac) – jwfearn

0

Il existe de nombreuses façons, à mon humble avis la bonne réponse est de repenser votre programme pour éviter de manipuler les chemins. J'ai posté une réponse ici: https://stackoverflow.com/a/40980510/2345997 ce qui est pertinent.

façons:

  1. Ajouter une option de ligne de commande qui permet à un utilisateur de spécifier le chemin en question au lieu de le lire à partir d'un fichier de configuration.
  2. Ajoutez une option de ligne de commande afin que l'utilisateur puisse spécifier un chemin de base. Les chemins dans le fichier de configuration seront interprétés comme étant situés sous ce chemin de base.
  3. Divisez votre fichier de configuration en trois. Un fichier aura une configuration multi-plateforme, un autre fichier n'aura qu'une configuration Windows et un fichier final aura une configuration Linux uniquement. Ensuite, l'utilisateur peut spécifier le chemin correct pour Windows et Linux. Sur Windows, votre programme lira le fichier de configuration multi-plateforme et le fichier de configuration Windows uniquement. Sous Linux, il lit le fichier multiplate-forme et le fichier de configuration Linux uniquement.
  4. Ajoutez un prétraitement à votre analyse de fichier de configuration. Cela vous permettra d'avoir un fichier de configuration où l'utilisateur peut faire en sorte que votre programme ignore certaines des lignes du fichier en fonction du système d'exploitation sur lequel le programme s'exécute. Par conséquent, l'utilisateur sera en mesure de spécifier le chemin d'accès au fichier deux fois. Une fois pour Linux, et une fois pour Windows.
  5. Modifiez la conception afin que les fichiers soient toujours situés dans le même répertoire que votre exécutable. L'utilisateur ne spécifie alors que les noms de fichier dans le fichier de configuration plutôt que les chemins d'accès aux fichiers.
  6. Utilisez une fonction simple qui fait passer "/" à "\". Puis documentez à l'utilisateur qu'il doit spécifier les chemins comme chemins Linux et cette transformation sera appliquée pour les fenêtres.
  7. Créez votre propre mini-chemin d'accès pour cela et documentez-le à l'utilisateur. Par exemple: "/" - spécifie un séparateur de répertoire, {root} - se développe à la racine du système de fichiers, {cwd} - se développe dans le répertoire courant, {app} - se développe dans le chemin de votre application etc ... L'utilisateur peut spécifier des chemins de fichier comme: {root} /myfiles/bob.txt sur les deux plates-formes.
  8. Certains chemins fonctionneront sur les deux plates-formes. E.g: chemins relatifs comme ../my files/bill.txt. Restreignez votre application pour travailler uniquement avec ces chemins. Documentez cette limitation et comment votre application traite les chemins d'accès à l'utilisateur.
Questions connexes